본문 바로가기
프로그래머스/lv.2

피로도

by bingual 2024. 2. 8.
반응형

 

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

 

프로그래머스

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

programmers.co.kr

문제풀이

(최소 필요 피로도 - 소모 피로도) 의 결과에서 작은 값으로 정렬하고 DP를 적용하여 풀이 할 수 있다.

def solution(k, dungeons):
    dp = [0] * (k + 1)

    dungeons = sorted(dungeons, key=lambda x: (x[0] - x[1], x[0]))
    for dungeon in dungeons:
        min_fatigue, consume_fatigue = dungeon
        for i in range(k, min_fatigue - 1, -1):
            dp[i] = max(dp[i], dp[i - consume_fatigue] + 1)

    return dp[k]

 

 

처음에는 아래와 같이 접근을 해서 19개의 테스트 케이스에서 3개의 테스트 케이스가 실패가 뜨는것을 보고 최적의 해가 보장 되지 않는다는 것을 확인한 뒤 방법을 바꿔 0/1 Knapsack Problem DP를 적용하게 되었다.

def solution(k, dungeons):
    answer = 0

    dungeons = sorted(dungeons, key=lambda x: (x[0] - x[1]), reverse=True)
    for dungeon in dungeons:
        min_fatigue, consume_fatigue = dungeon
        if k >= min_fatigue:
            k -= consume_fatigue
            answer += 1

    return answer

'프로그래머스 > lv.2' 카테고리의 다른 글

전화번호 목록  (0) 2024.02.09
[1차] 뉴스 클러스터링  (0) 2024.02.08
프로세스  (0) 2024.02.08
기능개발  (0) 2024.02.08
튜플  (0) 2024.02.07