-
99클럽 코테 스터디 7일차 TIL - 풀 수 있는 방법으로 바로 풀자Coding Test 2024. 3. 31. 18:03
문제 - 피로도 문제링크
오늘 배운 점
일단 최적화 신경쓰지 말고 풀어놓고 생각하자
문제 설명
최대한 많은 던전을 탐험해야 하는 문제입니다. 던전 정보 리스트 dungeons는 [[최소 필요 피로도, 소모 피로도], ...]로 주어지며 현재 가지고 있는 피로도 k가 최소 필요 피로도 이상이어야 소모 피로도를 소비하고 던전에 입장할 수 있습니다.
가지고 있는 피로도k와 던전 리스트dungeons가 주어질 때, 최대 던전 탐험 횟수를 구하면 됩니다.
풀이 과정
처음 이 문제를 봤을 때는 DFS 풀이가 생각났습니다. 생각난 대로 풀면 되는데 뭔가 최적화를 하고싶어서 뭔가 피로도를 정렬한 후 for문과 힙을 사용하면 스케쥴러나 철로문제처럼 풀 수 있지 않을까 싶어 더 생각해보았지만 예외케이스를 처리할 방법이 생각나지 않았습니다.
dp로 풀 수 있지 않을까 했지만 던전을 순회하며 dp를 채울 때 던전1->던전2->... 이런식으로 순서가 고정되므로 풀 수 없었습니다.
그래서 DFS로 풀었습니다.
def solution(k, dungeons): answer = -1 vis = set() def dfs(remained): nonlocal answer answer = max(answer, len(vis)) for i in range(len(dungeons)): if i not in vis and dungeons[i][0] <= remained: vis.add(i) dfs(remained - dungeons[i][1]) vis.remove(i) dfs(k) return answer
던전 탐험 순서를 고르는 경우의 수는 순열이기 때문에 방문체크용 vis를 둔 후, i던전이 이미 탐험한 곳이라면 넘어가고, 탐험하지 않았더라도 최소 피로도보다 가지고 있는 피로도가 작으면 넘어가는 식으로 구현했습니다.
그리고 정답 갱신은 DFS 호출할 때마다 갱신해주었는데, 이렇게 구현하지 않고 flag 변수를 내부에 둔 후, for문 속 if 조건이 단 한번도 성립하지 않을 때 더이상 갈 수 있는 던전이 없다는 뜻이므로, 이때 정답을 갱신하는 방식으로도 구현할 수 있습니다.
총평
DFS는 필요한 인자가 뭘지 생각하기보다 바로 내부 for문 작성하면서 필요한게 하나씩 보이는데 이때 인자를 추가하자
일단 가장 먼저 떠오른 정답 코드를 작성하고 최적화를 고려하자.
'Coding Test' 카테고리의 다른 글
99클럽 코테 스터디 9일차 TIL - 획기적인 풀이는 이해하고 넘어가자 (0) 2024.04.02 99클럽 코테 스터디 8일차 TIL - 좀 더 구조화된 답을 내보자 (0) 2024.04.01 99클럽 코테 스터디 6일차 TIL - 코테에 비슷한 문제가 나왔다. (0) 2024.03.30 99클럽 코테 스터디 5일차 TIL - 컴퓨터에게 일을 다 시키지 말자 (2) 2024.03.29 99클럽 코테 스터디 4일차 TIL - 타인의 풀이를 통해 배우기 (0) 2024.03.28