[프로그래머스] 피로도 (파이썬) - Lv.2

서봉성·2023년 1월 2일
0

코딩테스트

목록 보기
10/27

문제

풀이 방법

  • deque에 남은 피로도값, 던전 방문 여부 배열, 던전 방문횟수를 저장한다.
  • 첫번째 던전부터 마지막 던전까지 처음부터 차례차례로 방문하면서 deque에 저장
  • 만약 던전을 모두 방문했다면 던전 방문횟수가 가장 많은 것을 answer에 저장

코드

from collections import deque

def solution(k, dungeons):
    answer = -1
    
    dq=deque()
    visit=[0]*len(dungeons)
    dq.append([k, visit, 0])
    visit_len=len(visit)
    
    while dq:
        left, visits, cnt=dq.popleft()
        
        if not(0 in visits):
            answer=max(cnt, answer)
            continue            
        
        for i in range(visit_len):
            if visits[i]==1:
                continue                
            
            visits_copy=visits.copy()
            visits_copy[i]=1
            if left>=dungeons[i][0]:
                dq.append([left-dungeons[i][1], visits_copy, cnt+1])
            else:
                dq.append([left, visits_copy, cnt])
        
    return answer

느낀점

나는 항상 완전탐색을 하게 되면 재귀함수를 이용하지않고 deque만 사용한다.
다음에는 재귀함수를 이용하여 문제를 풀어보자.

profile
OverStudy

0개의 댓글