๋ฌธ์ ์ค๋ช
๋์ด๋: level3
๋ฌธ์ ํ์ด
์ด ๋ฌธ์ ์ ํต์ฌ์ ์นด๋๋ฅผ ๋ผ์ด๋๋ง๋ค ๋ฝ์ ์๊ฐ์ ํ์ง ์๊ณ ํต ํด๋๋ ๊ฒ์ด๋ค.
keepCards๋ผ๋ ๋ฐฐ์ด์ ๋ง๋ค๊ณ ๋ผ์ด๋๋ง๋ค ์นด๋ 2์ฅ์ ํตํด๋๋ค.
๋ด๊ฐ ๊ฐ์ง๊ณ ์๋ ์นด๋๋ myCards๋ผ๋ ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
1. myCards์์ ํ๊ฒ ๋๋ฒ๋ฅผ ๋ง๋ ๋ค. (์ฝ์ธ 0๊ฐ ์๋ชจ)
2. 1๋ฒ์ด ์๋๋ฉด ์ฝ์ธ 1๊ฐ ์ด์ ์์ ๋, myCards์์ 1์ฅ + keepCards์์ 1์ฅ ์จ์ ํ๊ฒ ๋๋ฒ๋ฅผ ๋ง๋ ๋ค. (์ฝ์ธ 1๊ฐ ์๋ชจ)
3. 2๋ฒ์ด ์๋๋ฉด ์ฝ์ธ 2๊ฐ ์ด์ ์์ ๋, keepCards์์ 2์ฅ์ ์จ์ ํ๊ฒ ๋๋ฒ๋ฅผ ๋ง๋ ๋ค. (์ฝ์ธ 2๊ฐ ์๋ชจ)
๋ง์ฝ 1,2,3์์ ํ๊ฒ ๋๋ฒ๋ฅผ ๋ชป์ฐพ๋๋ค๋ฉด ๋ผ์ด๋ ์ข ๋ฃ
์ฝ์ธ๋ ์๊ณ ๋จ์์๋ ์นด๋๋ ์๋ค๋ฉด ์ข ๋ฃ
์์ ๋ก ์ค๋ช ํ์๋ฉด
์ฝ์ธ = 4๊ฐ, ์นด๋ ์์๋ [3, 6, 7, 2, 1, 10, 5, 9, 8, 12, 11, 4]๊ฐ ์๋ค.
<1๋ผ์ด๋>
myCards = [3, 6, 7, 2]
keepCards = [1, 10] (1, 10 ์ ์นด๋ ๋ค์ด์ด)
์ฝ์ธ = 4๊ฐ
myCards์์ 2์ฅ ๋ฝ๊ธฐ -> 6+7=13, ์ฝ์ธ ์๋ชจ 0๊ฐ
<2๋ผ์ด๋>
myCards = [3, 2]
keepCards = [1, 10, 5, 9] (5, 9 ์ ์นด๋ ๋ค์ด์ด)
์ฝ์ธ = 4๊ฐ
myCards์์ 2์ฅ ๋ฝ๊ธฐ -> ํ๊ฒ๋๋ฒ ๋ง๋ค ์x
myCards์์ 1์ฅ, keepCards์์ 1์ฅ ๋ฝ๊ธฐ -> 3+10=13, ์ฝ์ธ ์๋ชจ 1๊ฐ
<3๋ผ์ด๋>
myCards = [2]
keepCards = [1, 5, 9, 8, 12] (8, 12 ์ ์นด๋ ๋ค์ด์ด)
์ฝ์ธ = 3๊ฐ
myCards์์ 2์ฅ ๋ฝ๊ธฐ -> ํ๊ฒ๋๋ฒ ๋ง๋ค ์x
myCards์์ 1์ฅ, keepCards์์ 1์ฅ -> ํ๊ฒ๋๋ฒ ๋ง๋ค ์x
keepCards์์ 2์ฅ ๋ฝ๊ธฐ -> 1+12 = 13, ์ฝ์ธ ์๋ชจ 2๊ฐ
<4๋ผ์ด๋>
myCards = [2]
keepCards = [5, 9, 8, 11, 4] (11, 4 ์ ์นด๋ ๋ค์ด์ด)
์ฝ์ธ = 1๊ฐ
myCards์์ 2์ฅ ๋ฝ๊ธฐ -> ํ๊ฒ๋๋ฒ ๋ง๋ค ์x
myCards์์ 1์ฅ, keepCards์์ 1์ฅ -> 2+11 = 13, ์ฝ์ธ ์๋ชจ 1๊ฐ
<5๋ผ์ด๋>
myCards = []
keepCards = [5, 9, 8, 4]
์ฝ์ธ = 0๊ฐ
์ฝ์ธ๋ ์๊ณ , ๋ด ์นด๋๋ ์์ -> ๋ผ์ด๋ ์ข ๋ฃ
์ฝ๋
func solution(_ coin:Int, _ cards:[Int]) -> Int {
var coin = coin
let n = cards.count
var point = n/3
var myCards = cards[0..<n/3].map {Int(String($0))!} // n/3๊ฐ ๊ฐ์ง๊ณ ์์
var keepCards: [Int] = []
var round = 1
let target = n+1
myLoop:
while true {
// ์ฝ์ธ๋ ์๊ณ ๋ผ ์ ์๋ ์นด๋๋ ์์ผ๋ฉด
if (myCards.isEmpty && coin <= 1) || (point == n) {
break
}
let card1 = cards[point]
let card2 = cards[point+1]
keepCards.append(card1)
keepCards.append(card2)
for i in 0..<myCards.count-1 {
for j in i+1..<myCards.count {
let myCard1 = myCards[i]
let myCard2 = myCards[j]
// ๋ด ์นด๋์์ 2์ฅ์ ๋ฝ์ ์ ์์ผ๋ฉด
if (myCard1+myCard2) == target {
round += 1
point += 2
myCards = myCards.filter {$0 != myCard1 && $0 != myCard2}
continue myLoop
}
}
}
// ์ฝ์ธ์ด 1๊ฐ ์ด์ ๋จ์์๊ณ ๋ด์นด๋+ํตํด๋ ์นด๋๋ฅผ ๋ผ ์ ์์ผ๋ฉด
if coin >= 1 {
for i in 0..<myCards.count {
for j in 0..<keepCards.count {
let myCard = myCards[i]
let keepCard = keepCards[j]
// ๋ด์นด๋ + ํต์นด๋์จ์ ์ฝ์ธ 1๊ฐ ์๋ชจ
if myCard+keepCard == target {
round += 1
coin -= 1
point += 2
myCards.remove(at: i)
keepCards.remove(at: j)
continue myLoop
}
}
}
}
// ์ฝ์ธ์ด 2๊ฐ์ด์ ๋จ์์๊ณ ํตํด๋ ์นด๋์์ ๋ค ๋ผ ์ ์์ผ๋ฉด
if coin >= 2 {
for i in 0..<keepCards.count-1 {
for j in i+1..<keepCards.count {
let keepCard1 = keepCards[i]
let keepCard2 = keepCards[j]
// ํต์นด๋ 2๊ฐ ์จ์ ์ฝ์ธ 2๊ฐ ์๋ชจ
if (keepCard1+keepCard2) == target {
round += 1
coin -= 2
point += 2
keepCards = keepCards.filter {$0 != keepCard1 && $0 != keepCard2}
continue myLoop
}
}
}
}
break
}
return round
}
ํ๊ธฐ
์ค์ ๋ก ์นด์นด์ค ๊ฒจ์ธ ์ธํฐ์ญ ์ฝํ ๋ฅผ ๋ดค์๋๋ฐ ๊ทธ ๋น์ ์ด ๋ฌธ์ ๋ฅผ ํ์ง ๋ชปํ๋ค. (์์ด๋์ด๊ฐ ์๋ ์ฌ๋ผ ์๋ ์๋๋ ๊ธฐ์ต์ด..ใ ใ )
๋ค์ ํ ๋, ํํธ๋ฅผ ์กฐ๊ธ ๋ณด๋ '์นด๋๋ฅผ ํตํด๋๋ค.' ๋ฅผ ์๊ฐํด๋ด๋ฉด ๊ธ๋ฐฉ ํธ๋ ๋ฌธ์ ์๋ค.
๊ณ์ ๊ทธ๋ ๊ทธ๋ ์ต์ ์ ์นด๋๋ฅผ ์ด๋ป๊ฒ ๋ฝ์ง..? ๋ผ๋๊ฑฐ์ ๋น ์ ธ์ ์๊ฐ๋ ๋ชปํ๋ค.
์๋ง ํํธ๋ฅผ ์๋ดค์ผ๋ฉด ํ์ ๋ชปํ์ง ์์์๊น..ใ ใ ์ด๋ ต๋ค~
'์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ํ์ด' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 20207] ๋ฌ๋ ฅ swift (0) | 2024.02.01 |
---|---|
[๋ฐฑ์ค 20057] ๋ง๋ฒ์ฌ ์์ด์ ํ ๋ค์ด๋ - swift (0) | 2023.11.16 |
[ํ๋ก๊ทธ๋๋จธ์ค 92342] ์๊ถ ๋ํ swift (1) | 2023.11.08 |
[ํ๋ก๊ทธ๋๋จธ์ค 92341] ์ฃผ์ฐจ ์๊ธ ๊ณ์ฐ swift (1) | 2023.11.03 |
[ํ๋ก๊ทธ๋๋จธ์ค 92335] k์ง์์์ ์์ ๊ฐ์ ๊ตฌํ๊ธฐ swift (0) | 2023.10.30 |