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

jaegeunsong97·2023년 2월 26일
0
post-thumbnail

주어진 데이터의 값을 보고 이분탐색을 풀어야 된다라고 감은 왔다. 근데 막상 이분탐색으로 어떻게 푸는지 잘 몰랐다.

문제를 이코테 떡복이 떡 자르기 문제와 매우매우 똑같다.

풀이 방법 자체는 이분탐색의 경우 특별하게 꼬지 않는 이상 비슷한 풀이 메커니즘을 가지고 있는 것 같다.

떡복이 떡 만들기 링크를 걸어놓겠다.
https://velog.io/@jaegeunsong_1997/%EC%9D%B4%EC%A7%84%ED%83%90%EC%83%89-%EB%96%A1%EB%B3%B5%EC%9D%B4-%EB%96%A1-%EB%A7%8C%EB%93%A4%EA%B8%B0

import java.util.*;

class Solution {
    public long solution(int n, int[] times) { // 6, [7, 10]
    	long answer = 0;
        Arrays.sort(times);
        long left = 0;
        long right = (long) n * times[times.length - 1]; // 가장 오래걸리는 시간(배열의 마지막)
        
        while (left <= right) {
        	long mid = (left + right) / 2;
            long sum = 0; // 총 심사한 인원
            
            for (int i = 0; i < times.length; i++) {
            	sum += mid / times[i]; // 이 부분이 이해가 안되면 예시로 계산을 해봐라
            }
            
            // 해야할 인원(n)보다 심사인원이 적은 경우 -> mid를 right쪽으로 옮긴다.
            if (sum < n) left = mid + 1; 
            else { // 해야할 인원(n)보다 심사인원이 많은 경우 -> mid를 left쪽으로 옮긴다.
            	right = mid - 1;
                answer = mid; // 최대한 적을 경우 정답이므로 끝
            }
        }
profile
현재 블로그 : https://jasonsong97.tistory.com/

0개의 댓글