https://school.programmers.co.kr/learn/courses/30/lessons/43238?itm_content=course14743

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

long long solution(int n, vector<int> times) {
    ll answer = 0;
    sort(times.begin(), times.end());
    ll right = (ll)times[times.size()-1]*n; // n은 최대 10억이기에 둘을 곱할 경우 10^18 수가 나옴. 이에 int 범위인 21억을 초과하기에 (ll)캐스팅
    ll left = 1;
    while(left<=right){
          ll mid = (right+left)/2;
          ll cnt = 0;
        for(ll idx =0; idx<times.size();++idx){
            cnt+=(mid/times[idx]);
        }
        if(cnt < n){
            left = mid+1;
        }
        else{ // cnt>=n을 만족하는 최솟값이 답.
            answer = mid;
            right = mid - 1;
        }
    }
    return answer;
}

+ Recent posts