Algorithm/프로그래머스
[프로그래머스/Python] 입국심사 - Level3
poppy
2021. 8. 2. 20:28
반응형
https://programmers.co.kr/learn/courses/30/lessons/43238
코딩테스트 연습 - 입국심사
n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한
programmers.co.kr
이 문제는 이분탐색 문제였다. 어느 부분을 이분 탐색하는지 감이 잡히지 않아서 다른 사람들이 푼 방법을 보고 코드를 짰다.
def solution(n, times):
answer = 0
left = 1
right = max(times) * n
# 이분탐색 수행
while left < right:
mid = (left + right) // 2
count = 0
for t in times:
count += mid // t # 심사할 수 있는 인원
if count >= n: # n명을 심사할 수 있다면
answer = mid
right = mid
else: # n명을 심사할 수 없다면
left = mid + 1
return answer
1. left = 1, right = max(times) * n 으로 초기화한다. right 는 가장 오래 걸리는 최악의 심사 기간이다.
2. 이분 탐색을 수행한다.
2-1. mid 를 구한 후 심사할 수 있는 인원(count) 를 계산한다.
2-2. n명을 심사할 수 있다면 현재 탐색한 구간보다 아래쪽에서 탐색한다
2-3. n명을 심사할 수 없다면 현재 탐색한 구간보다 위쪽에서 탐색한다
처음에는 while left <= right 로 했더니 시간초과가 났다. while left < right 으로 수정했더니 해결되었다. 이 작은 차이에 시간초과인지 아닌지가 갈리는 것이 신기했고 조심해야겠다고 생각했다.
반응형