λ¬Έμ
μ½λ
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int N, M, max_money;
vector<int> v;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cin>>N>>M;
for(int i=0; i<N; i++){
int inp; cin>>inp;
v.push_back(inp);
max_money += inp;
}
int ans = 0;
int start = 1, end = max_money; // μ΅λ μΈμΆ κΈμ‘μ λͺ¨λ λ μ μ΄μ©ν κΈμ‘μ ν©ν κ°μ΄λ€.
while(start <= end){
bool flag = false;
int take_cnt = 1;
int mid = (start + end) / 2;
int money = mid;
int temp_money = money;
for(int i=0; i<v.size(); i++){
if(v[i] > temp_money){
take_cnt++;
temp_money = money;
}
temp_money -= v[i];
if(temp_money < 0){
flag = true;
break;
}
}
if(flag || take_cnt > M) start = mid + 1;
/*
μλ 쑰건μ μΆκ°νλ©΄ νλ¦Ό
2 2
100 200
μ κ°μ λΆλΆμμ 225λ₯Ό μΆλ ₯νλλ° λ μμ κ°μ μ°Ύμ μ μμμλ λΆκ΅¬νκ³ μ’
λ£νκΈ° λλ¬Έ
else if(take_cnt == M){
cout<<money;
break;
}
*/
else{
ans = money;
end = mid - 1;
}
}
cout<<ans;
}
νμ΄
1μ ~ λͺ¨λ λ μ μ΄μ©ν κΈμ‘μ ν©ν κ° μ¬μ΄μ κ°μΈ Kλ₯Ό μ΄λΆ νμμ ν΅ν΄μ μ°Ύμ, κ·Έ Kμ κ°λ§νΌ μΈμΆνμ λ μ£Όμ΄μ§ 쑰건μ λ§μ‘±νλμ§ νμνλ©΄ λ©λλ€.
Kμ κ°μ μ°Ύλ μ΄λΆ νμ O(logN) * μ΄μ©ν κΈμ‘ λΉκ΅ O(N) = O(NlogN) μμ νμμ΄ κ°λ₯ν©λλ€.
λ€λ§ μ½λμλ μ£ΌμμΌλ‘ μ¨ λ¨λ€ μνΌ take_cnt == Mκ³Ό κ°μ 쑰건μ ν΅ν΄ break μν€λ©΄ μ λ΅μ΄ μ¬λ°λ₯΄μ§ μμλ° κ·Έ μ΄μ λ
2 2
100 200
μ κ°μ μ
λ ₯μΌλ 225μμ Kνμμ μ’
λ£νλλ°, 200μ΄λΌλ λ μμ κ°μ μ°Ύμ μ μμμλ λλ΄κΈ° λλ¬Έμ
λλ€.
'Algorithm π§π»βπ» > λ°±μ€(BOJ)' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[λ°±μ€,c++] 2141λ² - μ°μ²΄κ΅ (0) | 2022.09.13 |
---|---|
[λ°±μ€,c++] 14627λ² - νλνλ (0) | 2022.09.13 |
[λ°±μ€,c++] 2792λ² - 보μ μμ (0) | 2022.09.08 |
[λ°±μ€,c++] 20040λ² - μ¬μ΄ν΄ κ²μ (0) | 2022.09.07 |
[λ°±μ€,c++] 11561λ² - μ§κ²λ€λ¦¬ (0) | 2022.09.07 |
[λ°±μ€,c++] 11663λ² - μ λΆ μμ μ (0) | 2022.09.06 |
λκΈ