https://programmers.co.kr/learn/courses/30/lessons/43238
코딩테스트 연습 - 입국심사
n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한
programmers.co.kr
풀이
이 문제는 모든 상황을 for문으로 확인하기에는 범위가 너무 커서 이분탐색을 이용해 문제를 해결하였다.
이분탐색을 이용하기위해 start, end를 설정하였다. start는 걸리는 시간의 최소값, end는 걸리는 시간의 최대값으로 설정하였다.
이후, while문을 이용하여 이분탐색을 사용했다.
for문을 이용하여 mid의 시간일 때, 모든 심사관이 검사할 수 있는 사람의 수를 cnt에 저장한 후, n과 비교하여 같으면 end값을 mid-1로 설정해주었다. 이유는 만약 n과 cnt이 6이라도 mid가 29이면 29보다 작은 값인 28도 cnt이 6이 되기 때문에 더 작은 값을 검사하기 위해서 이다.
cnt이 n보다 크면 시간을 줄여 심사관이 검사할 수 있는 사람의 수를 줄여야 하기 때문에 end를 mid-1로 설정한다.
cnt이 n보다 작으면 시간을 늘려야 하기 때문에 start를 mid+1로 설정한다.
이후 while문이 종료되면 start값과 end값이 같아진다. 이 값이 가장 적절한 값이기 때문에 answer에 대입해준다.
아래의 그림을 보면 보다 쉽게 이해할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
def solution(n, times):
answer = 0
start=0
end=max(times)*n
while start<=end:
mid=(start+end)//2
cnt=0
for i in times:
cnt+=mid//i
if n==cnt:
end=mid-1
elif cnt>n:
end=mid-1
else:
start=mid+1
answer=start
return answer
|
cs |
'Python3 > 프로그래머스' 카테고리의 다른 글
2022.05.31 [프로그래머스] (python 파이썬) 베스트앨범 (0) | 2022.05.31 |
---|---|
2022.05.09 [프로그래머스] (python 파이썬) 스킬트리 (0) | 2022.05.09 |
2022.04.09 [프로그래머스] (파이썬 python) 가장 큰 수 (0) | 2022.04.09 |
2022.03.09 [프로그래머스] (python 파이썬) 메뉴 리뉴얼 (0) | 2022.03.09 |
2022.03.09 [프로그래머스] (python 파이썬) 오픈채팅방 (0) | 2022.03.09 |
댓글