자바/코딩테스트

[프로그래머스] 피로도 - Java(자바)

대전집주인 2024. 3. 28. 10:32
728x90
SMALL

 

문제 이해

  • 완전탐색 알고리즘으로 모든 경우의 수를 돌아본다.
  • DFS 방식으로 check 배열을 만들어서 내가 다녀온 던전인지를 체크하면서 던전을 탐험한다.
  • 피로도가 해당 던전의 최소피로도와 같거나 높을때 해당 던전을 탐험할 수 있다.
  • 던전을 탐험할때 cnt+1 을 하여 list에 담는다.
  • DFS가 끝이 났을때는 list에 탐험한 던전수가 들어있으므로 max값으로 return한다.
import java.util.*;
class Solution {
    static List<Integer> list = new ArrayList();
    static boolean[] check;
    public int solution(int k, int[][] dungeons) {
        check = new boolean[dungeons.length];
        DFS(dungeons, k, 0);    
                
        return Collections.max(list);
    }
    
    public void DFS(int[][] dungeons, int k, int cnt){
        
        for(int i = 0; i<dungeons.length; i++){
            if(!check[i] && k >= dungeons[i][0]){
                check[i] = true;
                list.add(cnt+1);
                DFS(dungeons, k-dungeons[i][1], cnt+1);
                check[i] = false;
            }
        }
    }
}
728x90
LIST