C++:: 프로그래머스 < 입국심사 >

jahlee·2023년 4월 14일
0

프로그래머스_Lv.3

목록 보기
3/29
post-thumbnail

처음에 비슷하게 접근을 하였지만 잘 풀리지않아서 찾아서 공부한 코드이다. 단순 이분탐색이긴한데 몇명이 지나갔는지를 체크하는 부분에서 애를먹었었다.

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

long long solution(int n, vector<int> times)
{
    long long answer = 0;
    sort(times.begin(), times.end());//입국심사 시간 오름차순 정렬

    long long left = 1;//최소시간
    long long right = n * (long long)times.back();//최대로 걸리는 시간

    while (left <= right)
    {
        long long mid = (left + right) / 2;
        long long passed = 0;//지나간 사람수
        for (int i = 0; i < times.size(); i++)
            passed += (mid / (long long) times[i]);
        if (passed >= n)
        {//주어진 인원과 같거나 더많이 지나갈수 있다면
            right = mid - 1;
            answer = mid;//현재 걸린 시간으로 정답 갱신
        }
        else left = mid + 1;
    }
    return answer;
}

0개의 댓글