본문 바로가기
알고리즘 일기

프로그래머스: 입국심사

by Beijing_KingGod 2019. 12. 9.

이분탐색으로 

left = 0;

right 는 최대 시간인 n*times.back(); 으로 주었다.

 

#include <string>
#include <vector>
#include <algorithm>
#include<iostream>
using namespace std;

long long solution(int n, vector<int> times) {
    sort(times.begin(), times.end());
    long long right = n*times.back();
    long long left = 0;
    long long mid = (right+left)/2;
    long long premid = 0;
    long long sum = 0;
    while(premid != mid){
        sum = 0;
        premid = mid;
        bool check = true;
        for(int i=0; i<times.size(); i++){
            sum += mid/times[i];
            if(mid%times[i] == 0){
                check = false;
            }
        }
        if(sum>n){
            right = mid;
        }else if(sum==n&&check){ //3, [10,10,11] 이런경우를 잡아준다.
            right=mid;
        }else if(sum<n){
            left = mid;
        }
        mid = (right+left)/2;
        if(premid == mid&& sum < n){ //이부분이 3,[1,2,2] 이런경우를 잡아준다.
            left = mid+1;
            right =  n*times.back();
            mid = (right+left)/2;
        }
    }

    return mid;
}

'알고리즘 일기' 카테고리의 다른 글

프로그래머스 : 순위  (0) 2019.12.10
프로그래머스: 여행경로  (0) 2019.12.09
프로그래머스 : 디스크 컨트롤러  (0) 2019.12.09
priority_queue 비교함수 만들기  (0) 2019.12.09
프로그래머스 : 예산  (0) 2019.12.08

댓글