던전이 3개 있고, 현재 피로도가 100이라고 가정.
초기 상태
던전 A를 탐험 (A 방문)
visited: [true, false, false]던전 A 이후 던전 B 탐험 (B 방문)
visited: [true, true, false]던전 A, B 이후 던전 C 탐험 (C 방문)
visited: [true, true, true]모든 던전을 탐험한 후, 백트래킹 시작
visited[2] = falsevisited: [true, true, false]던전 B에서 돌아가며 visited[1] = false
visited: [true, false, false]던전 A에서 다른 경로 탐험 (던전 C 방문)
visited: [true, false, true]던전 C 이후 던전 B 탐험 (B 방문)
visited: [true, true, true]모든 던전을 탐험한 후, 백트래킹 다시 시작
visited[1] = falsevisited: [true, false, true]던전 C에서 돌아가며 visited[2] = false
visited: [true, false, false]던전 A에서 돌아가며 visited[0] = false
visited: [false, false, false]import java.util.*;
class Solution {
static int d;
static boolean[] visited;
static int[][] dungeons;
static int max;
private static void dfs(int k, int cnt) {
max = Math.max(max, cnt);
for (int i = 0; i < d; i++) {
if (!visited[i] && dungeons[i][0] <= k) {
visited[i] = true;
dfs(k - dungeons[i][1], cnt + 1);
visited[i] = false;
}
}
}
public int solution(int k, int[][] dungeons) {
d = dungeons.length;
visited = new boolean[d];
Solution.dungeons = dungeons;
max = 0;
for (int i = 0; i < d; i ++) {
if (dungeons[i][0] <= k) {
Arrays.fill(visited, false);
visited[i] = true;
dfs(k - dungeons[i][1], 1);
}
}
return max;
}
}