728x90
반응형
https://www.acmicpc.net/problem/2805
유의사항
- 자른 길이의 합을 구할때 나무가 자르는 길이보다 큰 경우에만 수행이 되도록 조건을 넣어주어야 한다
- 자른 길이와 길이의 합은 long long int 형으로 선언해주어야 한다
#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<int> v;
int main(void) {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> m;
int start = 0;
int end = 0;
for(int i=0; i<n; i++){
int x;
cin >> x;
if(x>end) end = x;
v.push_back(x);
}
long long int mid = 0; // 자르는 길이
long long int total = 0; // 자른 길이 합
int result = 0; // 높이의 최대값
while(start<=end){
total = 0;
mid = (start + end)/2;
for(int i=0; i<n; i++){
if(v[i]>mid) total = total + v[i] - mid;
}
if(total<m) end = mid - 1; // 자른 길이의 합이 필요한 것보다 작은 경우
else {
result = mid;
start = mid + 1;
}
}
cout << result << '\n';
return 0;
}
728x90
반응형
'알고리즘' 카테고리의 다른 글
[백준/이분탐색/C++] 10816번 숫자 카드 2 (upper_bound, lower_bound 사용) (0) | 2023.01.03 |
---|---|
[백준/이분탐색/C++] 10815번 숫자 카드 (0) | 2023.01.03 |
[백준/DFS/C++] 2667번 단지번호 붙이기 (0) | 2023.01.02 |
[백준/이분탐색/C++] 1654번 랜선 자르기 (0) | 2023.01.01 |
[이코테/이진탐색/C++] 정렬된 배열에서 특정 수의 개수 구하기(lower_bound, upper_bound 사용) (1) | 2023.01.01 |