from collections import deque
def solution(n, times):
answer = 0
#times에서 --로 줄어들 때마다 answer+1, 심사대가 채워지면 n-1
time = 0
#visited = [False] * len(times) #심사대 여부
#queue = deque()
while n :
em_visited = 0
for i in range(len(times)):
times[i] -= 1
time =+1 #1초
if any(i == 0 for i in times):
em_visited = times.count(0)
n = n - em_visited
return time
처음으로 작성한 코드이지만 실행시간이 10초 이상이란다.. 지피티에게 물어보니 논리는 맞지만 매우 비효율적이라고 해서 다른 코드를 한 번 찾아보았다
def solution(n, times):
left = min(times) # 최소 시간
right = max(times) * n # 최대 시간
while left < right:
mid = (left + right) // 2 # 중간 시간
# 현재 mid 시간 동안 처리할 수 있는 인원 수를 계산
people_processed = sum(mid // t for t in times)
if people_processed >= n:
right = mid # 처리 가능 인원이 n명 이상이면 시간을 줄여본다.
else:
left = mid + 1 # 처리 가능 인원이 n명 미만이면 시간을 늘려본다.
return left # 최소 시간이 도달한 시점이 left에 저장된다.
와우.... 시간을 하나씩 늘린다는 것과 아예 다르게 접근을 하는 거 였다....
말 그대로 '최소 시간'을 찾아보는 것!!
이분 탐색은 더 많이 풀어봐야 할 것 같다...ㅜㅜ