알고리즘

프로그래머스 피로도 (JAVA)

박카스마시며코딩 2022. 4. 23. 19:10

https://programmers.co.kr/learn/courses/30/lessons/87946

 

코딩테스트 연습 - 피로도

XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던

programmers.co.kr

 

저는 순열을 통해 해당 문제를 해결하였습니다.

dungeons의 개수가 8이하여서 순열로 풀어도 8!이므로 1초안에 들어갈 것이라 생각하였습니다.

 

package Programmers.ETC;

public class 피로도 {
    public int solution(int k, int[][] dungeons) {
        int answer = -1;
        boolean[] used = new boolean[dungeons.length];
        answer = dfs(0,k,used,dungeons);
        return answer;
    }
    private static final int NEED_FATIGUE = 0;
    private static final int FATIGUE = 1;//fatigue
    private int dfs(int depth,int k , boolean[] used,int[][] dungeons){
        if(depth == dungeons.length){
            return 0;
        }
        int result = 0;
        for(int i = 0 ; i < dungeons.length ; i++){
            if(used[i]){
                continue;
            }
            if(k < dungeons[i][NEED_FATIGUE]){
                continue;
            }
            used[i] = true;
            result = Math.max(result,dfs(depth+1,k-dungeons[i][FATIGUE],used,dungeons)+1);
            used[i] = false;
        }
        return result;
    }
}