[프로그래머스 LV3] 입국심사

Junyoung Park·2022년 8월 14일
0

코딩테스트

목록 보기
558/631
post-thumbnail

1. 문제 설명

입국심사

2. 문제 분서

이분 탐색을 통해 심사관이 심사 가능한 최대 사람의 수를 구할 수 있다. 입국 심사가 가능한 가장 작은 시간을 찾자.

  • 총 시간 middle을 최솟값 0 ~ 최댓값 (가장 시간이 많이 드는 입국 심사 시간 * 전체 사람의 수)을 사용해 구할 수 있다. 심사관 한 명이 사용 가능한 시간 middle을 한 명을 심사하는 데 걸리는 time으로 나눈 몫이 곧 그 심사관이 심사 가능한 최대 사람의 수다.
  • 입국 심사가 가능하다면 더 작은 시간이 되는지 체크, 안 된다면 더 많은 시간을 할당해주자.

3. 나의 풀이

import Foundation

func solution(_ n:Int, _ times:[Int]) -> Int64 {
    var times = times
    times.sort(by: <)
    var left = 0
    var right = times.last! * n
    var result = 0
    
    while left <= right {
        let middle = (left + right) / 2
        var people = 0
        for time in times {
            people += middle / time
            if people >= n {
                break
            }
        }
        if people >= n {
            right = middle - 1
            result = middle
        } else {
            left = middle + 1
        }
    }
    return Int64(result)
}
profile
JUST DO IT

0개의 댓글