https://programmers.co.kr/learn/courses/30/lessons/43238?language=python3
코딩테스트 연습 - 입국심사
n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한
programmers.co.kr
def solution(n, times):
answer = 0
left = 0
right = max(times)*n
while left <= right:
mid = (left + right)//2
count =0
for time in times:
count += mid//time
if count >= n:
right = mid-1
answer = mid
elif count < n:
left = mid+1
return answer
어렵다 어려워 문제를 이해하는게 진짜 어렵다 ㅋㅋㅋㅋㅋ
우선 우리에게 주어진 times 에서 가장 최대의 값을 찾아야한다.
왜냐? times 에서 가장 큰 값을 이용해 가장 오래 걸리는 심사관만 사람들을 심사한다고 가정을 하고 걸리는 시간의 최대를 구한다.
이문제는 이분탐색이 들어가는 문제이다. 이 문제를 보고 어떻게 이분 탐색인지 알수 있을까??
이분 탐색의 '핵심은 어떤 값을 이분 탐색 할건지?' ' 기준은 무엇으로 잡아야하는지?'
우리는 이문제에서 시간을 가지고 이분 탐색을 한후 그 시간에 해당하는 사람을 찾아야한다. 그래서 기준은 시간을 대상으로 그시간에 심사받은 사람수를 구해야함 우리는 이분 탐색을 해가면 왼쪽의 기준이 오른쪽의 기준을 넘어갈때까지 이분 탐색을 해야한다.
반응형
'코딩 > 프로그래머스 lv1' 카테고리의 다른 글
[프로그래머스] 최소직사각형 - 파이썬 (0) | 2021.10.31 |
---|---|
프로그래머스 - 실패율 [파이썬] (0) | 2021.10.28 |
[카카오 인턴] 키패드 누르기 (0) | 2021.05.05 |
완주하지 못한 선수 (0) | 2021.04.10 |
예산 - 파이썬 (그리디) (0) | 2021.04.10 |