프로그래머스 LEVEL 2(피로도)
-
사용 언어 : javascript
-
해결 날짜 : 2022-10-11
- 해결 방법 :
- dfs 이용
- 방문하지 않고 남은 피로도가 필요 피로도보다 크다면 방문 처리
- dfs(현재 방문값의 피로도 감소 및 탐험 수 증가)
- 방문 처리 초기화(전체에 대한 dfs수행을 위함)
- 최대값 업데이트
- 완전 탐색 이용
- dungeons에 대한 모든 순열 구함
- 모든 순열을 돌며 최대값 업데이트
- dfs 이용
- 회고 :
- x
-
코드
function solution(k, dungeons) { let answer = 0; const visited = Array.from({length: dungeons.length}, () => false); const dfs = (fatigue, dungeons, explored) => { for (let i = 0; i < dungeons.length; i++) { if (!visited[i] && fatigue >= dungeons[i][0]) { visited[i] = true; dfs(fatigue - dungeons[i][1], dungeons, explored + 1); visited[i] = false; } } answer = Math.max(answer, explored); } dfs(k, dungeons, answer); return answer; }
const getPermutations = (arr, num) => { const results = []; if (num === 1) return arr.map(v => [v]); arr.forEach((fixed, index, origin) => { const rest = [...origin.slice(0, index), ...origin.slice(index + 1)]; const permutations = getPermutations(rest, num - 1); const attached = permutations.map(v => [fixed, ...v]); results.push(...attached); }); return results; } function solution(k, dungeons) { let answer = 0; const permutations = getPermutations(dungeons, dungeons.length); for (const permutation of permutations) { let temp = 0; let fatigue = k; for (const dungeon of permutation) { if (fatigue >= dungeon[0]) { fatigue -= dungeon[1]; temp++; } } answer = Math.max(answer, temp); } return answer; }
- 출처: 프로그래머스 코딩 테스트 연습, https://school.programmers.co.kr/learn/challenges