프로그래머스(Python) 풀이/Level.2

프로그래머스(Python) 87946번 피로도 풀이

개발윗미 2022. 5. 13. 18:00

Python으로 구현한 87946번 피로도 문제 풀이입니다.

 

https://programmers.co.kr/learn/courses/30/lessons/87946

 

코딩테스트 연습 - 피로도

XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던

programmers.co.kr


def solution(k, dungeons) :
    return search(k, dungeons, 0)


def search(k, dungeons, cnt) :
    cnt_list = [cnt]

    for i in range(len(dungeons)) :
        if dungeons[i][0] <= k :
            temp_list = dungeons.copy()
            del temp_list[i]
            cnt_list.append(search(k - dungeons[i][1], temp_list, cnt + 1))

    
    return max(cnt_list)

 

1. search() 함수의 작업은 아래와 같다.

  - cnt_list에 전달받은 cnt 값을 리스트 형태로 하여 정의한다.

  - dungeons 요소를 하나씩 확인하면서, 만약 현재 최소 필요 피로도가 k보다 작거나 같다면 temp_list에 dungeons 리스트를 복사한다.

  - 이후 temp_list의 현재 인덱스 값(i)을 삭제하고 search() 함수를 재귀 호출하여 반환받은 값을 cnt_list에 추가한다.

  - cnt_list 리스트에 존재하는 값 중 최대값을 반환한다.

  - 즉, 던전에 들어갈 때마다 피로도를 감소시키고, 현재 들어간 던전을 제외한 리스트를 다시 search() 함수에 전달하여 가장 많이 들어간 값(cnt)을 반환한다.