자료구조&알고리즘/프로그래머스
[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
정답 코드를 보게 되면 이진 탐색을 사용하였다 그 이유는 문제를 분석하면 숙련도의 최솟값을 찾는 문제이기 때문이다
정렬 된 범위 내에서 효율적으로 값을 찾기 위해서는 이진 탐색을 생각해보자