알고리즘/프로그래머스
99클럽 코테 스터디 22일차 TIL (87946번: 피로도)
Sondho
2024. 11. 18. 15:01
문제
https://school.programmers.co.kr/learn/courses/30/lessons/87946?language=java
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
학습 키워드
- 완전 탐색
풀이 및 코드
- DFS로 탐색하면서 탐색한다.
- 예를 들어 던전이 세 개 인 경우, 1 -> 2 -> 3 / 1 -> 3 -> 2 / 2 -> 1 -> 3 / 2 -> 3 -> 1 / 3 -> 1 -> 2 / 3 -> 2 -> 1 을 모두 찾아본다. 단, 최소 피로도가 부족한 경우에는 해당 던전에 들어가지 않게 해야한다.
import java.util.*;
class Solution {
private static int answer = 0;
public int solution(int k, int[][] dungeons) {
Arrays.sort(dungeons, (a, b) -> {
if (a[1] == b[1]) {
return b[0] - a[0];
}
return a[1] - b[1];
});
boolean[] visited = new boolean[dungeons.length];
dfs(k, dungeons, visited, 0, dungeons.length);
return answer;
}
private static void dfs(int k, int[][] dungeons, boolean[] visited, int count, int remaind) {
if (remaind == 0) {
answer = Math.max(answer, count);
return;
}
for (int r = 0; r < dungeons.length; r++) {
int[] dungeon = dungeons[r];
if (visited[r]) {
continue;
}
visited[r] = true;
if (k < dungeon[0]) {
dfs(k, dungeons, visited, count, remaind - 1);
} else {
dfs(k - dungeon[1], dungeons, visited, count + 1, remaind - 1);
}
visited[r] = false;
}
}
}