https://school.programmers.co.kr/learn/courses/30/lessons/87946
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
/**
* ## 이해
* 유저가 탐험할 수 있는 최대 던전 수를 구하라
* 미지의 것:
* 자료
* - 유저의 현재 피로도 k
- dungeons = [최소필요피로도, 소모피로도]
- "최소 필요 피로도"는 해당 던전을 탐험하기 위해 가지고 있어야 하는 최소한의 피로도
- "소모 피로도"는 던전을 탐험한 후 소모되는 피로도
* 조건
* - dungeons의 세로(행) 길이(즉, 던전의 개수)는 1 이상 8 이하
- dungeons의 가로(열) 길이는 2
*
* ## 계획
* - dungeons를 순회한다.
- k가 필요 피로도 보다 크다면 현재 요소를 지운다
- k-소모피로도를 한다.
- count+1을 한다.
- 그렇지 않다면, 현재 요소를 지운다.
- k를 그대로 둔다.
- count를 그대로 둔다.
- dungeons의 길이가 0이 되면 count 값을 리턴한다.
*
* ## 실행
*
* ## 반성
*
*/
const drop = (arr, index) => [...arr.slice(0, index), ...arr.slice(index + 1)];
const solution = (k, dungeons, count = 0) => {
if (dungeons.length === 0) {
return count;
};
return Math.max(...dungeons.map(([needFatigue, useFatigue], index) => {
if (k >= needFatigue) {
return solution(k - useFatigue, drop(dungeons, index), count + 1)
}
return solution(k, drop(dungeons, index), count)
}))
};
test('solution', () => {
expect(solution(80, [[80, 20], [50, 40], [30, 10]])).toEqual(3)
});
'코테연습' 카테고리의 다른 글
192. 땅따먹기 Javascript (0) | 2023.03.20 |
---|---|
191. 방문길이 Javascript (0) | 2023.03.20 |
189. 덧칠하기 Javascript (0) | 2023.03.16 |
188. 모음사전 Javascript (0) | 2023.03.16 |
187. 택배 배달과 수거하기 Javascript (0) | 2023.03.15 |
댓글