PS
[Progammers] Python 프로그래머스 입국심사(43238)
1223v
2024. 10. 30. 22:41
https://school.programmers.co.kr/learn/courses/30/lessons/43238
아주 최악의 상황을 고려해도 최대 시간 * 사람 수 내에 다 들어옴으로 end = 최대 시간 * 사람 수
시작은 1
중간값(정답 시간)을 배열 내 시간으로 나누면 그 시간에 들어갈 수 있는 인원의 총 수가 나온다.
그 값이 기존 사람수보다 많다면 값이 너무 커 사람이 많이 들어온 것이므로 end값을 줄인다.
만약 그 값이 기존 사람 수 보다 적다면, 값이 너무 작아 사람이 많이 못들어온 것이므로 start 값을 높인다.
def solution(n, times):
answer = 0
start = 1
end = max(times) * n
while start <= end:
mid = int((start + end) / 2)
result = 0
for i in times:
result += mid // i
if result >= n:
break
if result >= n:
answer = mid
end = mid - 1
else:
start = mid + 1
return answer
회고.
사람 수(N)가 정해져 있어서 N값을 비교해 최소 시간을 탐색하는 비교문을 구성하는게 아직 미흡한 것 같다...