티스토리 뷰
● 문제 링크
● 문제 설명
XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던전 탐험을 마쳤을 때 소모되는 "소모 피로도"가 있습니다. "최소 필요 피로도"는 해당 던전을 탐험하기 위해 가지고 있어야 하는 최소한의 피로도를 나타내며, "소모 피로도"는 던전을 탐험한 후 소모되는 피로도를 나타냅니다. 예를 들어 "최소 필요 피로도"가 80, "소모 피로도"가 20인 던전을 탐험하기 위해서는 유저의 현재 남은 피로도는 80 이상 이어야 하며, 던전을 탐험한 후에는 피로도 20이 소모됩니다.
이 게임에는 하루에 한 번씩 탐험할 수 있는 던전이 여러 개 있는데, 한 유저가 오늘 이 던전들을 최대한 많이 탐험하려 합니다. 유저의 현재 피로도 k와 각 던전 별 "최소 필요 피로도", "소모 피로도"가 담긴 2차원 배열 dungeons 가 매개변수로 주어질 때, 유저가 탐험할 수 있는 최대 던전 수를 return 하도록 solution 함수를 완성해주세요.
제한사항
- k는 1 이상 5,000 이하인 자연수입니다.
- dungeons의 세로(행) 길이(즉, 던전의 개수)는 1 이상 8 이하입니다.
- dungeons의 가로(열) 길이는 2 입니다.
- dungeons의 각 행은 각 던전의 ["최소 필요 피로도", "소모 피로도"] 입니다.
- "최소 필요 피로도"는 항상 "소모 피로도"보다 크거나 같습니다.
- "최소 필요 피로도"와 "소모 피로도"는 1 이상 1,000 이하인 자연수입니다.
- 서로 다른 던전의 ["최소 필요 피로도", "소모 피로도"]가 서로 같을 수 있습니다.
● 문제 해결 방향
던전이 최대 8개 까지라 itertools.permutations를 활용해 모든 조합을 구해서 반복문을 사용하는 방향을 생각했습니다.
조합을 생성하고
하나의 던전 조합에 대해서 던전을 지날때 마다 피로도를 처리해주고 다음 던전의 최소 필요 피로도와 비교하면서
지나갈 수 있는 던전의 수를 count 해주었습니다.
● 문제 해결 코드
import itertools
def solution(k, dungeons):
answer = -1
dun_li = list(itertools.permutations(dungeons, len(dungeons)))
for dun in dun_li:
hp = k
d_count = 0
for d in dun:
if d[0] > hp:
break
else :
hp -= d[1]
d_count += 1
answer = max(answer, d_count)
return answer
● 알게 된 것 / 아쉬운 점
'PYTHON' 카테고리의 다른 글
[프로그래머스/PYTHON] 크레인 인형뽑기 게임 (0) | 2022.01.18 |
---|---|
[LeetCode/PYTHON] Two Sum (0) | 2022.01.17 |
[프로그래머스/PYTHON] 큰 수 만들기 (0) | 2022.01.12 |
[프로그래머스/PYTHON] 괄호 회전하기 (0) | 2022.01.11 |
[프로그래머스/PYTHON] 2개 이하로 다른 비트 (0) | 2022.01.10 |
- Total
- Today
- Yesterday
- bundler
- 프로그래머스
- React
- TypeScript
- Repository Pattern
- redux-thunk
- v-for
- AxiosInterceptor
- reactrouter
- 알고리즘
- React.memo
- GraphQL
- error
- Vuex
- Transpiler
- redux
- Vue
- Vue.js
- 파이썬
- SOAP API
- SPA
- python
- Preloading
- webpack
- programmers
- clean code
- 상호평가
- 문제풀이
- 백준
- js
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |