알고리즘 유형 : 완전 탐색
풀이 참고 없이 스스로 풀었나요? : O
https://school.programmers.co.kr/learn/courses/30/lessons/87946
import sys
from itertools import permutations
INF = sys.maxsize
input = sys.stdin.readline
def solution(k, dungeons):
answer = -INF
for case in permutations(dungeons):
fatigue = k
cnt = 0
for min_cost, cost in case:
if fatigue < min_cost:
break
else:
cnt += 1
fatigue -= cost
answer = max(answer, cnt)
return answer
k = 80
dungeons = [[80, 20], [50, 40], [30, 10]]
print(solution(k, dungeons))
풀이 요약
dungeons에 k개의 원소가 있을 떄, k개의 원소를 다 순회하는 모든 경우의 수를 다 돌아본다.
그 모든 경우의 수는 dungeons의 원소를 대상으로 순열을 구하여 for문으로 순회해주면 된다.
각 경우의 수(case)에 대해, 첫 번쨰 던전부터 하나씩 접근한다.
fatigue에 k를 저장해두고, 던전을 순회하면서 소모 피로도를 계속 차감시켜주고 cnt를 1 누적해준다.
어느 던전에서 fatigue가 min_cost보다 작아지면, 그 때 for를 벗어난 후 그 던전에 대한 cnt와 answer를 max 연산하여 갱신해준다.
모든 경우의 수를 돈 다음 answer를 출력해주면 된다.
배운 점, 어려웠던 점