반응형
이 문제는 피로도 시스템( 0 이상의 정수로 표현한다.)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던전 탐험을 마쳤을 때 소모되는 "소모 피로도"가 있다.
"최소 필요 피로도"는 해당 던전을 탐험하기 위해 가지고 있어야 하는 최소한의 피로도를 나타내며, "소모 피로도"는 던전을 탐험한 후 소모되는 피로도를 나타낸다. 예를 들어 "최소 필요 피로도"가 80, "소모 피로도"가 20인 던전을 탐험하기 위해서는 유저의 현재 남은 피로도는 80 이상 이어야 하며, 던전을 탐험한 후에는 피로도 20이 소모된다.
import java.util.*;
class Solution {
static int answer = 0;
static boolean[] visited;
public int solution(int k, int[][] dungeons) {
visited = new boolean[dungeons.length];
dfs(0, k, dungeons);
return answer;
}
public void dfs(int cnt, int fatigue, int[][] dg) {
for(int i = 0; i < dg.length; i++){
if(visited[i] || dg[i][0] > fatigue) continue;
visited[i] = true;
dfs(cnt+1, fatigue-dg[i][1], dg);
visited[i] = false;
}
answer = Math.max(cnt, answer);
}
}
Script
주어진 던전의 개수만큼 돌면서 현재 피로도에서 가능한 던전들을 완전탐색해야한다. (DFS)
visited를 통해 방문 처리를 하여 이미 방문한 곳은 다시 방문하지 않도록 한다.
가능한 최대 던전 수를 구해야 하므로 Math.max()를 사용한다.
Math.max()는 두 개 이상의 숫자 중에서 가장 큰 값을 반환하는 메서드이다. 사용하는 기본적인 예제로는
int max = Math.max(5,10); 을 하면
System.out.println(max); 10이 출력한다.