반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- JavaScript
- 프로그래머스 자바스크립트
- MySQL
- 타입스크립트
- 자료구조
- 맨해튼거리
- node.js
- 정규표현식문제
- 프로그래머스 신규아이디추천
- Javascript 정렬
- 알고리즘
- 오블완
- mysql스키마
- 프로그래머스 자바스크립트 풀이
- next.js
- 자바스크립트 알고리즘
- TS
- Javascript sort
- binary search
- 맨해튼거리예제
- TypeScript
- 자바스크립트 정렬
- js 알고리즘
- 키패드누르기풀이
- 프로그래머스
- 티스토리챌린지
- 좌표거리구하기
- 자바스크립트 배열
- 정렬 알고리즘
- 깃허브
Archives
- Today
- Total
FE PARADISE
프로그래머스 피로도(완전 탐색) - 자바스크립트 풀이 본문
반응형
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
해당 문제는 완전탐색을 이용하여 풀 수 있는 문제이다. 완전 탐색의 여러 방식 중 DFS를 이용하여 문제를 풀어보자.
function explore(e, dungeons, count)
explore라는 함수를 만들어주었다. 인자는 다음과 같다.
e: 현재 남은 피로도
dungeons: 현재 남은 던전 배열
count: 현재까지 몇 개의 던전을 돌았는지
let maxCount = count;
최대 몇 개의 던전을 돌 수 있는지 구해야하므로 maxCount라는 변수를 정의했다. 초기값은 인자로 받아온 count이다.
function explore(e, dungeons, count) {
let maxCount = count;
for(let i = 0; i < dungeons.length; i++){
const [min, cons] = dungeons[i];
if(e >= min){
let remainDungeons = dungeons.slice();
remainDungeons.splice(i,1);
maxCount = Math.max(maxCount, explore(e - cons, remainDungeons, count + 1));
}
}
return maxCount;
}
이제 explore 함수로 남은 던전을 차례대로 돌았을 때 return 되는 값을 이용해 최대 던전 방문 횟수를 구해낸다.
function solution(k, dungeons){
return explore(k, dungeons, 0);
}
solution함수는 다음과 같이 explore함수를 인자값 count = 0을 주고 실행시킨다.
이 때 동작을 살펴보자.
예시로 solution(80, [[80,20],[50,40],[30,10]]) 일 때
먼저 explore(80, [[80,20],[50,40],[30,10]], 0) 이 실행된다.
주석으로 작성된 설명을 참고해보자.
// 인자값 e =80, dungeons= [[80,20],[50,40],[30,10]] count = 0
function explore(e, dungeons, count) {
let maxCount = count; // count = 0이므로 maxCount의 초기값은 0이된다.
for(let i = 0; i < dungeons.length; i++){ // i = 0 경우를 살펴보자.
const [min, cons] = dungeons[i]; // [min, cons]= [80,20]이다.
if(e >= min){ // 80 >= 80 은 true이다.
let remainDungeons = dungeons.slice(); // 남은 던전을 나타내는 변수이다.
remainDungeons.splice(i,1); // remainDungeons = [[50,40],[30,10]]이다.
maxCount = Math.max(maxCount, explore(e - cons, remainDungeons, count + 1));
// explore(80 - 20, [[50,40],[30,10]], 1) 값과 현재 maxCount 값 중 더 큰 값이 maxCount가 된다.
}
}
return maxCount; // 이제 maxCount를 반환해주자.
}
전체 코드
function explore(e, dungeons, count) {
let maxCount = count;
for(let i = 0; i < dungeons.length; i++){
const [min, cons] = dungeons[i];
if(e >= min){
let remainDungeons = dungeons.slice();
remainDungeons.splice(i,1);
maxCount = Math.max(maxCount, explore(e - cons, remainDungeons, count + 1));
}
}
return maxCount;
}
function solution(k, dungeons){
return explore(k, dungeons, 0);
}
반응형
'자료구조 & 알고리즘' 카테고리의 다른 글
프로그래머스 [1차] 캐시 - 자바스크립트 코드 (0) | 2025.02.17 |
---|---|
프로그래머스 - 괄호 회전하기 ( 자바스크립트 코드 & 풀이 ) (0) | 2025.01.12 |
프로그래머스 - 할인 행사 ( 자바스크립트 풀이 ) (0) | 2025.01.11 |
유클리드 호제법 - 최대공약수 구하기 (자바스크립트 코드) (0) | 2025.01.04 |
프로그래머스 영어 끝말잇기 - 자바스크립트 풀이 (0) | 2025.01.01 |