던전을 도는 순서에 따라서 최대 방문 횟수가 달라지기 때문에 DFS를 통해 순열을 돌면서 현재 피로도를 기반으로 방문 횟수를 카운트한다. 최댓값을 기록해 리턴.
import Foundation
var total = 0
var checked = [Bool]()
func solution(_ k:Int, _ dungeons:[[Int]]) -> Int {
checked = Array(repeating: false, count: dungeons.count)
DFS(k, 0, dungeons, [])
return total
}
func DFS(_ curK: Int, _ curCount: Int, _ dungeons: [[Int]], _ curRoute: [Int]) {
if curK >= 0 {
total = max(total, curCount)
}
for idx in 0..<dungeons.count {
if !checked[idx] && curK >= dungeons[idx][0] {
checked[idx] = true
DFS(curK - dungeons[idx][1], curCount + 1, dungeons, curRoute + [idx])
checked[idx] = false
}
}
}