문제풀이/프로그래머스

프로그래머스 | 피로도 문제풀이

soo-dal 2023. 12. 30. 21:56

문제 링크

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

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

 

 

문제 접근 방식

최소 필요 피로도, 소모 피로도가 주어진 상황에서 돌 수 있는 최대 던전의 수를 구해야하는 문제. 

던전을 들어가는 모든 경우의 수에 대해 돌 수 있는 던전 수를 구하고,

비교를 통해 최대 던전의 수를 구하는 완전 탐색 문제인 것으로 판단했음.

 

이전 완전 탐색 문제인 카펫과 소수찾기 문제와 달리 재귀함수를 통해 완탐을 진행.

 

처리 과정

각 재귀 과정에서는 

1. 더 돌 수 있는 던전이 없다면 재귀함수를 종료한다.(탈출조건)

2. 남은 던전들을 순회하며 들어갈 수 있는 던전을 찾고, 그 중 가장 많은 수를 도는 던전 수를 구한다.

3. 지금까지의 최대 던전 수를 반환한다.

 

재귀 함수는 그 단계에서 돌 수 있는 최대 던전의 수를 반환하도록 하였기 때문에 최종적으로 반환하는 값 역시

전체 던전에 대한 최대 던전 레이싱 횟수이다.

 

풀이 코드

def go_dungeons(stamina, count, remainder, dungeons):
    length = len(remainder)
    li = list(remainder)

    if length == 0:
        return count

    next_count = count;
    for i in range(length):
        if stamina >= dungeons[li[i]][0]:
            remainder.remove(li[i])
            next_count = max(next_count, go_dungeons(stamina - dungeons[li[i]][1], count + 1, remainder,dungeons))
            remainder.add(li[i])

    return next_count

def solution(k, dungeons):
    remainder=set([i for i in range(len(dungeons))])


    return go_dungeons(k,0,remainder,dungeons)

 

 

회고

소요시간 50분 초과

재귀함수를 구현하는데 있어서 버벅임이 발생..

종만북 부분 재귀함수 공부 및 정리 필요