Algorithm/Programmers

[ Programmers ] 87946 / 피로도

jennyf 2022. 7. 25. 16:19

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

 

프로그래머스

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

programmers.co.kr

 

문제


피로도를 사용하여 던전을 탐험할 수 있습니다.

 

각 던전마다 탐험을 시작하기 위해 필요한 최소 필요 피로도와 던전 탐험을 마쳤을 때 소모되는 소모 피로도가 있습니다.

  • 최소 필요 피로도: 해당 던전을 탐험하기 위해 가지고 있어야 하는 최소한의 피로도
  • 소모 피로도: 던전을 탐험한 수 소모되는 피로도

 

이 게임에는 하루에 한 번씩 탐험할 수 있는 던전이 여러 개 존재합니다.

 

한 유저는 이 던전들을 최대한 많이 탐험하려 합니다.

유저의 현재 피로도 k와 각 던전별 최소 필요 피로도, 소모 피로도가 담긴 2차원 배열 dungeons가 매개변수로 주어질 때,

유저가 탐험할 수 있는 최대 던전 수를 return 하도록 solution 함수를 완성해주세요.

 

 

 

제한사항


  • dungeons = [ 최소 필요 피로도, 소모 피로도 ]
  • 최소 필요 피로도 ≥ 소모 피로도

 

 

Solve


이 문제는 백트리킹으로도 풀 수 있는 문제라고 합니다. (풀어보기)

저는 해당 문제를 순열을 이용하여 풀었습니다. 

 

모든 순서를 구해서 각 case 마다 탐험할 수 있는 던전의 개수를 구해서 최댓값을 찾아주었습니다. 

for p in permutations(dungeons, len(dungeons)):
        print(p)

 

 

Code


from itertools import permutations

def solution(k, dungeons):
    
    result = 0
    
    for p in permutations(dungeons, len(dungeons)):
        tmp = k # 주의 
        cnt = 0
        
        for need, spend in p:
            if tmp >= need:
                # 가능 
                tmp -= spend 
                cnt += 1
        result = max(result, cnt)
        
    return result