Algorithm

[프로그래머스][이분탐색]입국심사

soduddl1 2021. 9. 25. 16:13

https://programmers.co.kr/learn/courses/30/lessons/43238

 

코딩테스트 연습 - 입국심사

n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한

programmers.co.kr

문제풀이

어떤 것을 놓고 이분탐색을 해야할지 감이 안잡혔던 문제이다. 이분탐색을 생각하지 않고 접근해보았는데 시간초과가 났다..(이분 탐색을 써야 시간초과가 안나는 것 같다^^;)

1. 시간 배열에 주어진 시간 * 입국 심사 받을 사람들 이렇게 곱해서 가능한 시간들을 배열에 삽입한다

2. 정렬해서 6번째 시간을 출력한다.

 

최소시간 1분과 최대시간 사이에 이분탐색을 해서 총 n명이 입국심사를 받을 수 있으면 된다 !

 

알게 된 점

1. 최소 값을 찾아야하는 것이기 때문에 target number를 찾아도 왼쪽 구간을 더 탐색해서 최소값을 찾아야한다.

if tmp >= n:
	end = mid

2.  그냥 mid를 답으로 하면 start와 end가 같아졌을 때 start 값이 나오지 않고 1이 출력된다

if tmp >= n:
	end = mid
		if answer > mid:
			answer = mid

 

소스코드

def solution(n, times):
    start = 1
    end = max(times)*n
    answer = end
    while start < end:
        mid = (start + end)//2
        tmp=0
        for i in times:
            tmp += (mid//i)
        if tmp >= n:
            end = mid
            if answer > mid:
                answer = mid
        elif tmp < n :
            start = mid + 1
    return answer