
-Code
import java.util.*;
class Solution {
static boolean[] visited;
static int answer = 0;
public int solution(int k, int[][] dungeons) {
visited = new boolean[dungeons.length];
DFS(0, k, dungeons);
return answer;
}
private static void DFS(int depth, int now, int[][] dungeons) {
// 최대 돌수 있는 던전의 수이므로 계속 검사
answer = Math.max(answer, depth);
// 던전들을 조합하면서 확인
for (int i = 0; i < dungeons.length; i++) {
// 방문하지 않고 현재 피로도가 필요 피로도가많은 경우 탐색
if (!visited[i] && now >= dungeons[i][0]) {
visited[i] = true;
DFS(depth + 1, now - dungeons[i][1], dungeons);
visited[i] = false;
}
}
}
}
static으로 answer를 정하고 최대 던전 탐사수인데 다른 로직써서 틀려서 그 부분 수정하고 해결했습니다. 하지만 static말고 int를 반환하는 방법으로 풀어보고 싶어서 다음과 같이 해결했습니다.
import java.util.*;
class Solution {
static boolean[] visited;
public int solution(int k, int[][] dungeons) {
visited = new boolean[dungeons.length];
return DFS(0, k, dungeons);
}
private static int DFS(int depth, int now, int[][] dungeons) {
int answer = depth;
// 던전들을 조합하면서 확인
for (int i = 0; i < dungeons.length; i++) {
// 방문하지 않고 현재 피로도가 필요 피로도가많은 경우 탐색
if (!visited[i] && now >= dungeons[i][0]) {
visited[i] = true;
int result = DFS(depth + 1, now - dungeons[i][1], dungeons);
answer = Math.max(answer, result);
visited[i] = false;
}
}
return answer;
}
}'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 35097번 2025 (0) | 2026.01.07 |
|---|---|
| [백준/Java] 2468번 안전 영역 (0) | 2026.01.06 |
| [백준/Java] 16139번 인간-컴퓨터 상호작용 (0) | 2026.01.06 |
| [백준/Java] 20949번 효정과 새 모니터 (0) | 2026.01.06 |
| [백준/Java] 3060번 욕심쟁이 돼지 (0) | 2026.01.06 |