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값을 비교해 최소 시간을 탐색하는 비교문을 구성하는게 아직 미흡한 것 같다...
'PS' 카테고리의 다른 글
[Progammers] Python 프로그래머스 모음사전(84512) (0) | 2024.11.03 |
---|---|
[BOJ] Python 백준 알고리즘 수업 - 너비 우선 탐색 1(24444) (0) | 2024.11.01 |
[BOJ] Python 백준 알고리즘 수업 - 깊이 우선 탐색 1(24479) (0) | 2024.10.31 |
[BOJ] Python 백준 징검다리(11561) (0) | 2024.10.29 |
[BOJ] Python 백준 게임(1072) (1) | 2024.10.28 |
댓글