💻출처 : 프로그래머스 > 코딩 테스트 > 위클리 챌린지
🏆난이도 : Level 2
게임에는 여러 던전이 있다.
던전을 플레이하기 위해서는, 플레이어의 피로도가 던전에 할당된 최소 피로도
이상이어야 한다.
플레이어가 던전을 플레이한 이후, 플레이어의 피로도는 던전의 소모 피로도
만큼 감소한다.
사용자가 탐험할 수 있는 던전의 최대 개수를 출력하라.
사용자가 어떤 순서로 던전을 탐험하느냐에 따라 탐험할 수 있는 최대 던전의 수가 달라진다.
예시를 살펴보았을 때, 던전의 최소 피로도
와 소모 피로도
에 따른 탐색 순서에는 특별한 규칙이 없어보인다.
따라서, 가능한 던전의 모든 배열 순서(순열)를 탐색하여 사용자가 탐험할 수 있는 최대 던전의 수를 구하였다.
던전들의 모든 배열 순서는 DFS
를 응용하여 구현하였다.
function solution(k, dungeons) {
let max=0;
const visited = Array(dungeons.length).fill(false)
function dfs(count,k){
max = max < count ? count : max;
for(let i=0;i < dungeons.length;i++){
if(visited[i])
continue;
let curDungeon= dungeons[i]
if(curDungeon[0]<=k){
visited[i]=true;
dfs(count+1, k-curDungeon[1])
visited[i]=false;
}
}
}
dfs(0,k)
return max;
}
간단한 코드지만 오랜만에 DFS
를 구현하였더니 좀 막막한 구석이 있었다.
문제를 꾸준히 풀어 이런 낯섦을 빨리 없애야 겠다😥