Notice
Recent Posts
Recent Comments
Link
개발 무지렁이
[문제풀이 py] P87946 피로도 본문

피로도 / 완전탐색 순열 🍔
🎠. 'itertools 모듈'을 이용해 'permutations()' 메서드를 이용할 줄 알아야 한다 => '순열'
🎠. 'max() 빌트인 함수'를 이용해 '현재값'을 '이전값'과 비교해서, 큰 값을 '이전값'으로 넣어서 '최대값'을 찾는다.

import itertools
def solution(k, dungeons):
length = len(dungeons)
# 순열
res = itertools.permutations(dungeons, length)
perm = list(res)
# print(perm)
prev = 0
for case in perm:
fatigue = k
cnt = 0
# 각 던전을 돌면서
for dungeon in case:
# 현재 피로도가 최소 피로도보다 높으면
if fatigue >= dungeon[0]:
fatigue -= dungeon[1] # 소모 피로도
cnt += 1
prev = max(prev, cnt)
print(prev)
return prev
💡. 문제 접근 방법
: 돌아야 하는 던전의 순서에는 딱히 규칙이 없어보인다.
결국 모든 순서의 조합을 비교해서 그 중 돌 수 있는 던전의 수가 가장 큰 값을 리턴해야 하는데,
이는 완전탐색 중 순서가 결과에 영향을 미치는 순열을 이용하면 된다.
순열로 만든 각 case에서 나온 결과가 이전의 결과보다 크면 이전값을 갱신해 주는 방식으로 문제를 해결했다.
(이때, 이전값을 넣는 변수는 for in문 바깥에 위치해야 한다.)
🤡. 실수한 부분
: itertools.permutation()에서 두번째 인자의 값을 '입출력 예'에 맞게 3으로 하드코딩해서
일부 테스트케이스에서 실패가 떴다.
이 부분은 len(dungeons)로 길이를 넣어줘야, 그 길이만큼 순서있게 조합한 결과를 얻을 수 있다.
'코딩 테스트 > 문제풀이 Python ver.' 카테고리의 다른 글
[문제풀이 py] B17298 오큰수 (0) | 2023.07.08 |
---|---|
[문제풀이 py] B2559 수열 (0) | 2023.07.08 |
[문제풀이 py] B15686 치킨배달 (0) | 2023.07.07 |
[문제풀이 py] P84512 모음사전 (0) | 2023.07.06 |
[문제풀이 py] P42839 소수찾기 (0) | 2023.07.04 |
Comments