Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

코딩응급실

프로그래머스: 피로도 본문

Java

프로그래머스: 피로도

Daeryuk Kim 2024. 3. 7. 15:58
import java.util.*;

class Solution {
    static boolean[] visited;  
    static int count = 0;  
  
    public int solution(int k, int[][] dungeons) {  
        visited = new boolean[dungeons.length];  
        dfs(0, k, dungeons);  
        return count;  
    }  
      
    private void dfs(int depth, int fatigue, int[][] dungeons){  
        for (int i = 0; i < dungeons.length; i++){  
            if (visited[i] || dungeons[i][0] > fatigue) {  
                continue;  
            }  
            visited[i] = true;  
            dfs(depth + 1, fatigue - dungeons[i][1], dungeons);  
            visited[i] = false;  
        }  
        count = Math.max(count, depth);  
    }  
    public static void main(String[] args) {
        int k = 80;
        int[][] dungeons = {{80,20}, {50,40}, {30,10}};
        Solution sol = new Solution();
        int result = sol.solution(k, dungeons);
        System.out.println(result);
        
    }
}

만약, 첫 번째 → 세 번째 → 두 번째 던전 순서로 탐험한다면

현재 피로도는 80이며, 첫 번째 던전을 돌기위해 필요한 "최소 필요 피로도" 또한 80이므로, 첫 번째 던전을 탐험할 수 있습니다. 첫 번째 던전의 "소모 피로도"는 20이므로, 던전을 탐험한 후 남은 피로도는 60입니다.
남은 피로도는 60이며, 세 번째 던전을 돌기위해 필요한 "최소 필요 피로도"는 30이므로, 세 번째 던전을 탐험할 수 있습니다. 세 번째 던전의 "소모 피로도"는 10이므로, 던전을 탐험한 후 남은 피로도는 50입니다.
남은 피로도는 50이며, 두 번째 던전을 돌기위해 필요한 "최소 필요 피로도"는 50이므로, 두 번째 던전을 탐험할 수 있습니다. 두 번째 던전의 "소모 피로도"는 40이므로, 던전을 탐험한 후 남은 피로도는 10입니다.
따라서 이 경우 세 던전을 모두 탐험할 수 있으며, 유저가 탐험할 수 있는 최대 던전 수는 3입니다.

만약 아래 코드를 실행하면,

import java.util.*;

class Solution {
    static boolean[] visited;  
    static int count = 0;  
  
    public int solution(int k, int[][] dungeons) {  
        visited = new boolean[dungeons.length];  
        dfs(0, k, dungeons);  
        return count;  
    }  
      
    private void dfs(int depth, int fatigue, int[][] dungeons){  
        for (int i = 0; i < dungeons.length; i++){ 
            System.out.print("visited["+i+"] = "+visited[i]);
            if (visited[i]) {  
                System.out.println(", i: "+i+" 이미 방문.");
                continue;
            } else if (dungeons[i][0] > fatigue) {
                System.out.println(", i: "+i+" 체력 부족.");
                continue;
            }
            System.out.println();
            System.out.println("====dfs 발동 ====");
            visited[i] = true;  
            dfs(depth + 1, fatigue - dungeons[i][1], dungeons); 
            visited[i] = false;  
        }  
        System.out.println("count: "+count+" depth: "+depth);
        count = Math.max(count, depth);  
    }  
    public static void main(String[] args) {
        int k = 80;
        int[][] dungeons = {{80,20}, {50,40}, {30,10}};
        Solution sol = new Solution();
        int result = sol.solution(k, dungeons);
        System.out.println(result);
        
    }
}

visited[0] = false
====dfs 발동 ====
visited[0] = true, i: 0 이미 방문.
visited[1] = false
====dfs 발동 ====
visited[0] = true, i: 0 이미 방문.
visited[1] = true, i: 1 이미 방문.
visited[2] = false, i: 2 체력 부족.
count: 0 depth: 2
visited[2] = false
====dfs 발동 ====
visited[0] = true, i: 0 이미 방문.
visited[1] = false
====dfs 발동 ====
visited[0] = true, i: 0 이미 방문.
visited[1] = true, i: 1 이미 방문.
visited[2] = true, i: 2 이미 방문.
count: 2 depth: 3
visited[2] = true, i: 2 이미 방문.
count: 3 depth: 2
count: 3 depth: 1
visited[1] = false
====dfs 발동 ====
visited[0] = false, i: 0 체력 부족.
visited[1] = true, i: 1 이미 방문.
visited[2] = false
====dfs 발동 ====
visited[0] = false, i: 0 체력 부족.
visited[1] = true, i: 1 이미 방문.
visited[2] = true, i: 2 이미 방문.
count: 3 depth: 2
count: 3 depth: 1
visited[2] = false
====dfs 발동 ====
visited[0] = false, i: 0 체력 부족.
visited[1] = false
====dfs 발동 ====
visited[0] = false, i: 0 체력 부족.
visited[1] = true, i: 1 이미 방문.
visited[2] = true, i: 2 이미 방문.
count: 3 depth: 2
visited[2] = true, i: 2 이미 방문.
count: 3 depth: 1
count: 3 depth: 0
3

'Java' 카테고리의 다른 글

프로그래머스: [1차] 뉴스 클러스터링  (0) 2024.03.07
프로그래머스: 프로세스  (0) 2024.03.07
프로그래머스: 기능개발  (0) 2024.03.07
프로그래머스: 튜플  (0) 2024.03.07
프로그래머스: [1차] 캐시  (0) 2024.03.07