본문 바로가기

알고리즘/프로그래머스

[Python] 피로도

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

 

프로그래머스

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

programmers.co.kr

  • 첫 번째 풀이(틀림)
def solution(k, dungeons):
    answer = 0
    t_list = [(i, x[0]-x[1]) for i, x in enumerate(dungeons)]
    t_list = sorted(t_list, key=lambda x : x[1], reverse=True)
    
    for i in t_list:
        
        if dungeons[i[0]][0] <= k:
            k -= dungeons[i[0]][1]
            answer += 1
    return answer

최소 필요 피로도와 소모 피로도의 차이가 큰 던전부터 돌면 되지 않을까? 하는 생각으로 풀었음.

3개의 테스트 케이스에서 틀림

뭔가 빼먹은 게 있었나...

 

  • 두 번째 풀이(순열 이용)
from itertools import permutations

def solution(k, dungeons):
    answer = 0
    p_dun = list(permutations(dungeons))
    
    for i in p_dun:
        answer2 = 0
        t = k
        for j in i:
            if j[0] <= t:
                t -= j[1]
                answer2 += 1
        answer = max(answer, answer2)
        
    return answer

그냥 순열을 이용해서 가능한 모든 순서를 저장하고 각 경우의 수마다 던전수를 체크한 뒤에 최댓값을 리턴함

이게 옳았나?

'알고리즘 > 프로그래머스' 카테고리의 다른 글

[Python] 가장 가까운 같은 글자  (0) 2023.01.16
[Python] 오픈 채팅방  (1) 2023.01.13
[Python] 푸드 파이트  (0) 2023.01.09
[Python] 귤 고르기  (0) 2023.01.08
[Python] 다트 게임  (0) 2023.01.07