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
정답 코드를 보게 되면 이진 탐색을 사용하였다 그 이유는 문제를 분석하면 숙련도의 최솟값을 찾는 문제이기 때문이다
정렬 된 범위 내에서 효율적으로 값을 찾기 위해서는 이진 탐색을 생각해보자
'자료구조&알고리즘 > 프로그래머스' 카테고리의 다른 글
[Python] 대충 만든 자판 (0) | 2024.12.22 |
---|---|
[Python] 소수찾기 - 완전탐색 (0) | 2024.02.15 |
[Python] 모의고사 - 완전탐색 (0) | 2024.02.15 |
[Python] 최소 직사각형 - 완전탐색 (0) | 2024.02.14 |
[Python] H_Index - 정렬 (0) | 2024.02.13 |