본문 바로가기

코딩 테스트/이진탐색

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

문제

대기중인 n명과 각 심사관마다 걸리는 소요 시간이 times가 매개변수로 주어질 때, 모두 통과하는 최소 시간을 구하여라

 

풀이 과정

1. 이진 탐색을 사용하여 시간을 탐색한 후

2. 해당 시간에 통과할 수 있는 사람의 수를 구한 뒤

3. 통과할 수 있는 사람의 수가 n과 같다면 반환

 

class Solution {
    fun solution(n: Int, times: IntArray): Long {
        var start: Long = 0
        var end: Long = times.maxOf{it}.toLong() * n
        
        while(start <= end){
            val mid: Long = (start + end)/2
            var count: Long = 0
            
            for(i in times){
                count += mid/i.toLong()
            }
            
            if(count < n){
                start = mid + 1 
            }
            else{
                end = mid -1
            }
        }
        
        return start
    }
}