반응형

https://programmers.co.kr/learn/courses/30/lessons/43238

 

코딩테스트 연습 - 입국심사

n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한

programmers.co.kr

 

각 심사관이 심사하는 시간이 a라면, b라는 시간 안에 처리할 수 있는 사람의 수는 b / a 입니다.

모든 심사관의 처리할 수 있는 사람의 수가 n보다 크거나 같다면, 이분 탐색으로 시간 범위를 줄여나가면 됩니다.

left = 1, right = 처리하는데 가장 오래 걸리는 심사관의 시간 * n 으로 초기화한 뒤에 진행하였습니다.

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

int extractMaxTime(vector<int>& times) {
    int max = -1;
    for(int time : times) {
        if(max < time) max = time;
    }
    return max;
}

long long solution(int n, vector<int> times) {
    long long l = 1, r = (long long)extractMaxTime(times) * n;
    while(l <= r) {
        long long sum = 0;
        long long mid = (l + r) / 2; // 처리하는데 걸리는 시간
        for(int time : times) {
            sum += mid / time; // 각 심사관이 mid시간 안에 처리할 수 있는 사람 수
        }
        if(n <= sum) { // 처리 가능한 시간인 경우
            r = mid - 1;
        } else {
            l = mid + 1;
        }
    }
    return l;
}
반응형

'Algorithm' 카테고리의 다른 글

프로그래머스 : 등굣길  (0) 2021.11.13
프로그래머스 : 징검다리  (0) 2021.11.13
프로그래머스 : 소수 찾기  (0) 2021.11.13
프로그래머스 : K번째수  (0) 2021.11.13
프로그래머스 : 위장  (0) 2021.11.13

+ Recent posts