반응형
프로그래머스
이분탐색
https://programmers.co.kr/learn/courses/30/lessons/43237
#include <string>
#include <vector>
#include <algorithm>
#include <cmath>
using namespace std;
int solution(vector<int> budgets, int M) {
int answer = 0;
sort(budgets.begin(), budgets.end());
long sum = 0;
for(int budget: budgets) sum += budget;
if(sum <= M) return budgets[budgets.size()-1];
int max = budgets[budgets.size()-1];
int min = (int) floor(M / budgets.size());
int mid = 0;
int compareMid = 0;
while(true){
mid = (int) ceil((max+min) / 2);
sum = 0;
for(int budget: budgets) sum += ( budget > mid ) ? mid : budget;
if(mid == compareMid){
answer = mid;
break;
}
if(sum > M){
max = mid;
} else {
min = mid;
}
compareMid = mid;
}
return answer;
}
참고
반응형
'코딩테스트 문제풀이 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 가장 큰 수 (0) | 2020.02.27 |
---|---|
[프로그래머스] 쇠막대기 (0) | 2020.02.27 |
[프로그래머스] 모의고사 (0) | 2020.02.27 |
[프로그래머스] 종이접기 (0) | 2020.02.26 |
[프로그래머스] 문자열 압축 (0) | 2020.02.26 |