피로도

Seongjin Jo·2023년 5월 8일
0

프로그래머스 LV2

목록 보기
5/28

문제

풀이

class Solution {
    static int cnt=Integer.MIN_VALUE;
    static boolean[] ch;
    
    public static void DFS(int L,boolean[] ch,int[][] dg,int k){
        
        cnt = Math.max(cnt,L);
        
        for(int i=0; i<dg.length; i++){
            if(!ch[i]){
                if(k >= dg[i][0]){
                    ch[i]=true;
                    k-=dg[i][1];
                    DFS(L+1,ch,dg,k);
                    ch[i]=false;
                    k+=dg[i][1];
                }
            }   
        }
    
    }
    
    public int solution(int k, int[][] dg) {
        int answer = -1;
        ch = new boolean[dg.length];
        DFS(0,ch,dg,k);
        return cnt;
    }
}

내가 생각하는 DFS() 패턴구조가 있는데, 이 문제는 꼭 그런 패턴구조가 필요없다는 것을 알려준다.
어려운 문제는 아닌데, 2차원 배열에 맞는 조건을 신경 써서 DFS호출을 해줘야한다.
그리고 중복은 안되기 때문에 체크배열을 이용해서 방문 체크를 해주면 좋을 것같다.

0개의 댓글