본문 바로가기
Beakjoon&프로그래머스/Java

[프로그래머스/Java] 피로도

by 현장 2026. 1. 6.

-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;
    }
}