티스토리 뷰

알고리즘 - Java

[Programmers] 피로도 - Java

LuxuryCoding 2022. 3. 31. 19:18
728x90
 

코딩테스트 연습 - 피로도

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

programmers.co.kr

풀이 

1. 순열 고려

2. 순열 만들 때 dogeons 배열의 인덱스로 뽑아서 비교해야 함

3. 던전 배열 개수만큼 조합이 되었을 때 for문을 돌려 result를 구한다.

package programmers.level2;

import org.junit.Test;

public class P87946 {
    @Test
    public void 정답(){
        int[][]dungeons = {{80,20},{50,40},{30,10}};
        System.out.println(solution(80,dungeons));
    }
    static int max =0;
    static boolean [] isSelect;
    static int [] temp;
    public int solution(int k, int[][] dungeons) {
        int answer = -1;
        int len = dungeons.length;
        isSelect= new boolean[len];
        temp=new int [len];
        permutaion(0,dungeons,len,k);
        answer=max;
        return answer;
    }
    public void permutaion(int cnt,int [][] dungeons,int len,int k){
        if(cnt==len){
            int result =0;
            int tempK = k;
            for(int i=0;i<len;i++){
                if(dungeons[temp[i]][0]>tempK)break;
                result++;
                tempK-=dungeons[temp[i]][1];
            }
            max = Math.max(result,max);
            return;
        }
        for(int i=0;i<len;i++){
            if(isSelect[i])continue;
            temp[cnt]=i;
            isSelect[i] = true;
            permutaion(cnt+1,dungeons,len,k);
            isSelect[i] = false;
        }
    }
}
댓글
최근에 달린 댓글
최근에 올라온 글
Total
Today
Yesterday
«   2025/10   »
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