자료구조&알고리즘/프로그래머스

[PCCP 기출문제] 2번 / 퍼즐 게임 챌린지

두잇 두두 2024. 12. 22. 09:24
728x90
def solution(diffs, times, limit):
    
    def calculate(level):
        time = 0
        prev_time = 0
        n = len(diffs)
        for i in range(n):
            if diffs[i] <= level:
                time += times[i]
            else:
                time += (times[i] + prev_time) * (diffs[i] - level) + times[i]
            prev_time = times[i]

        return time

    left, right = 1, max(diffs)
    result = right

    while left <= right:
        mid = (left + right) // 2
        time = calculate(mid)
        if time <= limit:
            result = mid
            right = mid - 1
        else:
            left = mid + 1

    return result

 

정답 코드를 보게 되면 이진 탐색을 사용하였다 그 이유는 문제를 분석하면 숙련도의 최솟값을 찾는 문제이기 때문이다

정렬 된 범위 내에서 효율적으로 값을 찾기 위해서는 이진 탐색을 생각해보자