알고리즘[Python]/프로그래머스
[ Lv 3 ] 입국심사
병훈1234
2021. 7. 12. 12:25
풀이과정
이분 탐색을 사용하는 문제이므로 "시간" 을 기준으로 left, right 설정. (right는 정답의 최대치여야 하므로 가장 오래 심사하는 심사관이 전체 인원을 심사할때로 설정)
중간 시간(left + right // 2)일 때, 각각의 심사관이 몇명을 심사할 수 있는지 더해서 총 심사 가능한 인원수를 구함
구한 값이 n보다 크거나 같다면 시간을 줄여야 하므로 right를 m-1로, 작다면 시간을 늘려야 하므로 left를 m+1로 대체함
이 때, 구한 값이 n보다 크거나 같다면 answer에 따로 저장해 주어야 한다.
def solution(n, times):
answer = 9999999999
r = max(times) * n
l = 0
while (l <= r):
m = (l + r) // 2
tot = 0
for time in times:
tot += (m // time)
if tot >= n:
answer = m
r = m - 1
else:
l = m + 1
return answer
출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges