1
- import heapq as hq
2
-
3
1
def solution (n , times ):
4
2
answer = 0
3
+ left = 1 # 최소 시간
4
+ right = n * max (times ) # 최대 시간
5
5
6
- time_heap = list (zip ([0 ]* len (times ), times ))
7
- hq .heapify (time_heap )
8
-
9
- while n :
10
- wait , judge = hq .heappop (time_heap )
11
- n_wait , n_judge = time_heap [0 ]
12
-
13
- # 처리시간 계산
14
- judge_time = total_judge_time (wait , judge , answer )
15
- n_judge_time = total_judge_time (n_wait , n_judge , answer )
16
-
17
- # 더 빠른 심사 있으면
18
- if judge_time > n_judge_time :
19
- n_wait , n_judge = hq .heappop (time_heap )
20
- wait , n_wait = n_wait , wait
21
- judge , n_judge = n_judge , judge
22
- hq .heappush (time_heap , (n_wait , n_judge ))
23
-
24
- n -= 1
25
- hq .heappush (time_heap , (wait + judge , judge ))
26
- answer = max (answer , wait + judge )
6
+ # 이분탐색
7
+ while left < right :
8
+ mid = (left + right ) // 2
9
+ total = 0
27
10
11
+ # 각 심사위원이 주어진 시간동안 심사할 수 있는 인원 더하기
12
+ for time in times :
13
+ total += mid // time
28
14
29
- return answer
30
-
31
-
32
- # 심사 대기시간 + 처리시간 구하기
33
- def total_judge_time ( wait , judge , answer ) :
34
- total_time = wait + judge
15
+ # 심사할 수 있는 총 인원이 n 이상이면 왼쪽 반 탐색하기
16
+ if total >= n :
17
+ right = mid
18
+ # 심사할 수 있는 총 인원이 n보다 작으면 오른쪽 반 탐색하기
19
+ else :
20
+ left = mid + 1
35
21
36
- if answer % judge :
37
- total_time += judge - answer % judge
22
+ answer = left # 최소 시간
38
23
39
- return total_time
40
-
24
+ return answer
41
25
42
26
43
27
'''
44
28
정확성 테스트
45
- 테스트 1 〉 실패 (0.03ms , 10.3MB )
46
- 테스트 2 〉 실패 (1.53ms , 10.2MB)
47
- 테스트 3 〉 실패 (10.23ms , 10.3MB )
48
- 테스트 4 〉 실패 (239.12ms, 24.7MB )
49
- 테스트 5 〉 실패 (891.40ms, 26MB )
50
- 테스트 6 〉 실패 (시간 초과 )
51
- 테스트 7 〉 실패 (시간 초과 )
52
- 테스트 8 〉 실패 (시간 초과 )
53
- 테스트 9 〉 실패 (시간 초과 )
29
+ 테스트 1 〉 통과 (0.01ms , 10.2MB )
30
+ 테스트 2 〉 통과 (0.10ms , 10.2MB)
31
+ 테스트 3 〉 통과 (3.71ms , 10.2MB )
32
+ 테스트 4 〉 통과 (276.01ms, 14.2MB )
33
+ 테스트 5 〉 통과 (414.98ms, 14.3MB )
34
+ 테스트 6 〉 통과 (332.12ms, 14.3MB )
35
+ 테스트 7 〉 통과 (546.60ms, 14.2MB )
36
+ 테스트 8 〉 통과 (517.43ms, 14.3MB )
37
+ 테스트 9 〉 통과 (0.04ms, 10.3MB )
54
38
'''
0 commit comments