Problem
Solution
ํด๋น ๋ฌธ์ ๋ ๋ฐฑํธ๋ํน์ผ๋ก ํ์ด์ผ ํ๋ ๋ฌธ์ ์ ๋๋ค.
(ํน์ ๋ฐฑํธ๋ํน์ ๋ชจ๋ฅด์๋ ๋ถ๋ค์ ์ฌ๊ธฐ ์์ ๋ณด๊ณ ์์ฃผ์ธ์!)
answer๋ฅผ 0๋ถํฐ ํํ์ ์์ํด์ค๋๋ค.
func solution(_ k:Int, _ dungeons:[[Int]]) -> Int {
var answer:Int = 0
explore(dungeons: dungeons, answer: &answer, k:k, count: 0)
return answer
}
๋์ ๋ค์ ์ํํ๋ฉฐ ์ต์ ํ์ ํผ๋ก๋(dungeon[0])์ ์๋ชจ ํผ๋ก๋(dungeon[1])๋ณด๋ค ํ์ฌ ํผ๋ก๋(k)๊ฐ ํฐ์ง ๋น๊ตํด์ค๋๋ค.
๋ง์ฝ ์กฐ๊ฑด์ ๋ถํฉํ๋ค๋ฉด ์๋ก์ด ํผ๋ก๋์ธ ์๋ก์ด ํผ๋ก๋(newK)๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ ํ์ฌ ํผ๋ก๋(k)์์ ์๋ชจ ํผ๋ก๋(dungeon[1])๋ฅผ ๋นผ์ค๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ ๋ค์์ ์กฐ๊ฑด์ ๋ถํฉํ ๋์ ์ ์ญ์ ํ๊ณ ๊ฐฏ์(count)๋ฅผ ํ๋ ๋๋ ค์ค ๋ค ์ฌ๊ทํด์ค๋๋ค.
explore๋ฅผ ์ฌ๊ทํ๋ฉด์ ๊ฐ์ฅ ๋ง์ ๊ฐฏ์๋ฅผ ์ ์ฅํ answer์ count๋ฅผ ๋น๊ตํด ๋ ํฐ ๊ฐ์ผ๋ก answer๋ฅผ ๋ณ๊ฒฝํด์ค๋๋ค.
func explore(dungeons:[[Int]],answer:inout Int,k:Int,count:Int) {
answer = max(answer,count)
for (i,dungeon) in dungeons.enumerated() {
var newDungeons:[[Int]] = dungeons
if dungeon[0] <= k && dungeon[1] <= k{
let newK = k - dungeon[1]
newDungeons.remove(at: i)
explore(dungeons:newDungeons,answer: &answer,k: newK,count: count + 1)
}
}
}
Source Code
๋๊ธ