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호출을 해줘야한다.
그리고 중복은 안되기 때문에 체크배열을 이용해서 방문 체크를 해주면 좋을 것같다.