Algorithm/Java
[프로그래머스 고득점 kit - 완전탐색] - 피로도
__hseong__
2025. 4. 30. 13:25
728x90
반응형
class Solution {
int maxCount = 0; // 최대 던전 수 저장 변수
public int solution(int k, int[][] dungeons) {
boolean[] visited = new boolean[dungeons.length]; // 방문 여부 체크
dfs(k, dungeons, visited, 0); // DFS 시작
return maxCount;
}
private void dfs(int k, int[][] dungeons, boolean[] visited, int count) {
// 현재까지 탐험한 던전 수로 최대값 갱신
maxCount = Math.max(maxCount, count);
for (int i = 0; i < dungeons.length; i++) {
int minRequired = dungeons[i][0];
int consume = dungeons[i][1];
if (!visited[i] && k >= minRequired) {
visited[i] = true;
dfs(k - consume, dungeons, visited, count + 1);
visited[i] = false; // 백트래킹
}
}
}
}
- 해당 문제는 전체의 피로도가 있다면 각 던전의 (최소 피로도, 소모 피로도) 세트를 돌면서 최대한 다 돌 수 있는 수를 구한 후에 최종적으로 그것을 출력하는 것인데, 던전의 순서를 바꾸면서 찾는 것이 관건이다.
- 이 또한 앞서서 배운 백트래킹을 이용해서 dfs 를 통해 구현하였다.
728x90
반응형