728x90
programmers.co.kr/learn/courses/30/lessons/43238
#include <string>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;
long long solution(int n, vector<int> times) {
long long answer = 0;
long long total =0;
sort(times.begin(),times.end());
long long s = 1;
long long e = times[0]*(long long)n;
long long mid = (s+e)/2;
while(s<=e){
mid = (s+e)/2;
total =0;
for(int i=0; i<times.size(); i++){
total += mid/times[i] ;
}
if(total<n){s=mid+1;}
else if(total>=n){answer = mid; e=mid-1;}
}
return answer;
}
헤맸던 부분
- n 옆에 (long long) 으로 cast 안해줬더니 첨에 틀렸었다. int 끼리 연산에서 long long 형을 얻을려면 casting 해주는거 잊지말자!
- total이 n보다 크거나 같아야지 모든 사람을 커버할 수 있으므로 answer 갱신은 total>=n 일 때 해주어야함
'프로그래머스 > 이분탐색' 카테고리의 다른 글
징검다리 - Level4 (0) | 2021.04.27 |
---|---|
길찾기게임 - 이진탐색(전위,후위) (0) | 2021.03.09 |
징검다리 건너기 (0) | 2021.03.04 |
예상 대진표 (0) | 2021.01.06 |