완전 탐색으로 풀게 되면 던전의 개수를 N이라고 할 때, 던전을 방문하는 순서의 모든 경우의 수 N!만큼 계산을 해야한다. -> O(N!)
그런데 문제에서 가능한 던전의 최대 개수는 8개이기 때문에 아무리 느려도 O(8!)만큼의 시간복잡도밖에 나오지 않기 때문에 완전 탐색으로 풀어도 되는 문제다!
나는 dfs를 이용해서 완전탐색해서 풀었다!
class Solution {
private val visited = BooleanArray(8)
private var count = 0
private var answer = 0
fun solution(k: Int, dungeons: Array<IntArray>): Int {
for (i in dungeons.indices) {
dfs(k, i, dungeons)
}
return answer
}
private fun dfs(k: Int, current:Int, dungeons: Array<IntArray>) {
visited[current] = true
count++
if (answer < count) {
answer = count
}
for (i in dungeons.indices) {
val newK = k - dungeons[current][1]
// 방문한 적이 없는 던전이고, 현재 피로도가 던전의 최소 필요 피로도 이상이어야만 간다.
if (!visited[i] && (dungeons[i][0] <= newK)) {
dfs(newK, i, dungeons)
}
}
visited[current] = false
count--
}
}
언제쯤 한번에 컴파일 오류 없이 제출할 수 있을까~!?
코드가 깔끔해요