Python/CoTe

[programmers] 피로도

joannekim0420 2022. 3. 13. 16:40
728x90

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

 

코딩테스트 연습 - 피로도

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

programmers.co.kr

 

 

 

처음에는 쉽게 구할 수 있는 방법이 있지 않을까 했다.

예를 들어, 필요한 피로도와 소모하게 되는 피로도의 차가 가장 큰 값부터 방문하는 방식으로 -> 반 정도 실패(반은 가능하다는게 오히려 놀라움)

 

※빼박 완전 탐색이다. 순서까지 중요한 순열 문제!

from itertools import permutations

def solution(k, dungeons):
    answer = 0
    perm = permutations(dungeons)
    for p in perm:
        tmp = int(k)
        tmp_answer = 0
        
        for i in p:
            need, used = i[0],i[1]
            if tmp >= need:
                tmp -= used
                tmp_answer +=1
            else:
                break
        answer = max(answer, tmp_answer)
    return answer

순열 (Permutations) 구하는 쌍의 순서가 고려된다 (n!)

조합 (Combinations) 구하는 쌍의 순서는 상관 없다 (nCi = n*(n-1)*...(n-i) / i*(i-1)*...*2*1 )

 

순열과 조합을 쉽게 구하는 방법은 itertools을 사용하면 된다. -> 튜플 안에 요소들이 들어간 generator 가 반환된다.

 

완전탐색이라는 힌트를 얻자면, 우선 효율성 테스트 문제가 없고, 던전의 최대 개수가 8까지이다.

'Python > CoTe' 카테고리의 다른 글

[programmers] 삼각 달팽이  (0) 2022.03.20
[programmers] 예상 대진표  (0) 2022.03.14
[programmers] 카펫  (0) 2022.03.13
[programmers] 짝지어 제거하기  (0) 2022.03.12
[programmers] 뉴스 클러스터링 - Counter  (0) 2022.03.12