링크: https://school.programmers.co.kr/learn/courses/30/lessons/87946
XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던전 탐험을 마쳤을 때 소모되는 "소모 피로도"가 있습니다. "최소 필요 피로도"는 해당 던전을 탐험하기 위해 가지고 있어야 하는 최소한의 피로도를 나타내며, "소모 피로도"는 던전을 탐험한 후 소모되는 피로도를 나타냅니다. 예를 들어 "최소 필요 피로도"가 80, "소모 피로도"가 20인 던전을 탐험하기 위해서는 유저의 현재 남은 피로도는 80 이상 이어야 하며, 던전을 탐험한 후에는 피로도 20이 소모됩니다.
이 게임에는 하루에 한 번씩 탐험할 수 있는 던전이 여러개 있는데, 한 유저가 오늘 이 던전들을 최대한 많이 탐험하려 합니다. 유저의 현재 피로도 k와 각 던전별 "최소 필요 피로도", "소모 피로도"가 담긴 2차원 배열 dungeons 가 매개변수로 주어질 때, 유저가 탐험할수 있는 최대 던전 수를 return 하도록 solution 함수를 완성해주세요.
k | dungeons | result |
---|---|---|
80 | [[80,20],[50,40],[30,10]] | 3 |
현재 피로도는 80입니다.
만약, 첫 번째 → 두 번째 → 세 번째 던전 순서로 탐험한다면
만약, 첫 번째 → 세 번째 → 두 번째 던전 순서로 탐험한다면
따라서 이 경우 세 던전을 모두 탐험할 수 있으며, 유저가 탐험할 수 있는 최대 던전 수는 3입니다.
목표: 유저의 현재 피로도 k
와 각 던전별 "최소 필요 피로도", "소모 피로도"가 담긴 2차원 배열 dungeons
가 매개변수로 주어질 때, 유저가 탐험할수 있는 최대 던전 수를 return
from itertools import permutations
def solution(k, dungeons):
answer = 0
# 모든 던전 탐험 순서를 permutations 함수를 이용해 생성
for p in permutations(dungeons, len(dungeons)):
tmp = k # 남은 피로도
cnt = 0 # # 현재 탐험한 던전 수
# 생성된 순열 p에 대해 던전을 하나씩 탐험
for min_required_stamina, stamina_cost in p:
# 현재 남은 피로도가 던전의 최소 필요 피로도보다 크거나 같다면 던전을 탐험할 수 있는 것
if tmp >= min_required_stamina:
tmp -= stamina_cost # 던전 탐험 후 소모된 피로도만큼 남은 피로도를 감소
cnt += 1 # 탐험한 던전 수 증가
# 현재 순열에서 탐험한 던전 수와 지금까지 계산된 최대 던전 수를 비교해 더 큰 값을 저장
answer = max(answer, cnt)
return answer