유저가 던전을 가능한 한 많이 탐험하고자 한다.
각 던전은 탐험을 시작하기 위한 최소 필요 피로도와 실제로 탐험할 때 소모되는 피로도가 있다.
유저는 주어진 피로도 내에서 가능한 조합으로 던전을 탐험해야 하며, 던전은 하루에 한 번만 탐험할 수 있다.
예를 들어, 유저의 피로도가 80이고, 던전 정보가
[[80, 20], [50, 40], [30, 10]]이라면,
던전 1 → 던전 2 → 던전 3 순서로 최대 3개까지 탐험할 수 있다.
가능한 모든 탐험 순서를 탐색하면서 유저가 탐험할 수 있는 최대 던전 수를 구한다.
이를 위해 DFS(깊이 우선 탐색)을 사용하였고, 던전 방문 여부를 저장하는 visited 배열을 통해 중복 방문을 방지하였다. 그리고 재귀적으로 던전을 탐험하면서 최대 탐험 횟수를 갱신하였다.
import Foundation
func solution(_ k: Int, _ dungeons: [[Int]]) -> Int {
var maxCount = 0
var visited = [Bool](repeating: false, count: dungeons.count)
func dfs(_ currentFatigue: Int, _ count: Int) {
maxCount = max(maxCount, count)
for i in 0..<dungeons.count {
if !visited[i] {
let required = dungeons[i][0]
let consumption = dungeons[i][1]
if currentFatigue >= required {
visited[i] = true
dfs(currentFatigue - consumption, count + 1)
visited[i] = false
}
}
}
}
dfs(k, 0)
return maxCount
}