728x90
반응형
2019/02/25 - [Algorithm/Python] - [Programmers]:Lv 3. 예산
문제:
n 명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다.
처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한 명만 심사를 할 수 있습니다. 가장 앞에 서 있는 사람은 비어 있는 심사대로 가서 심사를 받을 수 있습니다. 하지만 더 빨리 끝나는 심사대가 있으면 기다렸다가 그 곳으로 가서 심사를 받을 수도 있습니다.
모든 사람이 심사를 받는데 걸리는 시간을 최소로 하고 싶습니다.
입국심사를 기다리는 사람 수 n, 각 심사관이 한 명을 심사하는데 걸리는 시간이 담긴 배열 times가 매개변수로 주어질 때, 모든 사람이 심사를 받는데 걸리는 시간의 최솟값을 return 하도록 solution 함수를 작성해주세요.
풀이 방법:
이분탐색 문제이므로 이 문제도 예산 문제와 같이 심사를 다 받는 시간을 찍어보면 된다. 왼쪽 값을 0 우측 값을 times의 가장 큰 값에 n을 곱한 값으로 설정하고 이분 탐색을 진행해 나가면 된다. 중간에 n명을 통과를 할 수 있는 시간이 있더라도 최소값을 찾기 위해 끝까지 진행해본다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | def solution(n, times): left=0 right=max(times)*n temp=right answer=right while(right>=left): mid=(right+left)//2 people=0 for i in times: people+=mid//i if people==n: if answer>=mid: answer=mid right=mid-1 elif people>n: right=mid-1 else: left=mid+1 if answer==temp: return right+1 else: return answer | cs |
728x90
반응형
'Algorithm > Python' 카테고리의 다른 글
[Programmers]Lv 3. 이중우선순위큐 (1) | 2019.03.03 |
---|---|
[Programmers]Lv 2.가장 큰 정사각형 찾기 (0) | 2019.03.02 |
[Programmers]Lv 2. 타겟 넘버 (0) | 2019.02.28 |
[Programmers]Lv 3. 정수 삼각형 (0) | 2019.02.27 |
[Programmers]Lv 2. 카펫 (0) | 2019.02.26 |