던전의 개수가 8개로 수가 많지 않다.
던전을 탐험하는 경우의 수는 8! 인데, 이는 작은 숫자이므로 Brute force로 해결이 가능하다.
순열을 찾는 알고리즘은 back tracking을 사용할 수 있는데, 던전을 방문하고 함수를 탐색을 하고 탐색이 끝나면 방문 내역에서 지워주면 된다.
import java.util.HashSet;
import java.util.Set;
class Solution {
Set<String> visited = new HashSet<>();
int answer = 0;
public String makeKey(int[] d){
return d[0] + "&" + d[1];
}
public void solve(int k, int[][] dungeons, int depth){
int n = dungeons.length;
answer = Math.max(depth, answer);
for(int i = 0; i < n; i ++){
int[] d = dungeons[i];
String key = makeKey(d);
if(!visited.contains(key) && k >= d[0]){
visited.add(key);
solve(k - d[1], dungeons, depth + 1);
visited.remove(key);
}
}
}
public int solution(int k, int[][] dungeons) {
solve(k, dungeons, 0);
return answer;
}
}
반응형
'Algorithm > Programmers' 카테고리의 다른 글
[Java] 2021 위클리 챌린지 11주차 - 아이템 줍기 (0) | 2021.10.23 |
---|---|
[Java] 2021 위클리 챌린지 10주차 - 교점에 별 만들기 (0) | 2021.10.14 |
[Java] 2021 위클리 챌린지 9주차 - 전력망을 둘로 나누기 (0) | 2021.10.07 |
[Java] 위클리 챌린지 8주차 - 최소직사각형 (0) | 2021.09.27 |
[Java] 2021 위클리 챌린지 7주차 - 입실 퇴실 (0) | 2021.09.14 |