프로그래머스 - 입국심사(kotlin)

silver·2021년 8월 11일
0

[문제 내용]
심사관이 한명을 심사하는데 걸리는 시간들이 주어지고 n명까지 처리하는데 걸리는 최소 시간을 구하시오.

[example 1]

ntimesreturn
6[7,10]28

[해결 방법]
하.. 진짜 이문제를 어떻게 이분탐색해서 풀라고 이분탐색 카테고리에 들어가 있는건지
이해를 못하고 한 삼십분은 헤맸던것 같다..
관점을 뒤집는게 이렇게 힘들다..

이분탐색해서 푸는 방법은
대충 걸리는 시간(middle)을 정해서
그 시간안에 최대 몇명을 처리 할 수 있는 구하고
그 구한 값이 n에 해당하는 지 찾으면 되는 거다!

최대값으로는 일단 가장 적은 시간으로 n명을 처리할때 걸리는 시간으로 설정하고,
최소값으로는 그냥 가장 적은 시간으로 설정한다.

class Solution {
    fun solution(n: Int, times: IntArray): Long {
        var answer: Long = Long.MAX_VALUE
        var max = times.min()!! * n.toLong()
        var min = times.min()!!.toLong()
        while(min <= max) {
            var can = 0L
            val middle = (max + min) / 2
            for(time in times) {
                can += middle/time
                
                if(can >= n) {
                    answer = middle
                    max = middle -1
                    break
                }
            }

            if(can < n) {
                min = middle + 1
            }
        }

        return answer
    }
}

0개의 댓글