[ 백준 2805번 나무자르기 ]
2805번: 나무 자르기
첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보
www.acmicpc.net
#include<iostream>
#include<algorithm>
using namespace std;
long long tree[1000001];
long long n,m,l,r=0,md,sum;
int main()
{
cin>>n>>m;
for(int i=0;i<n;i++)
{
cin>>tree[i];
}
sort(tree,tree+n);
l=0;
r=2000000000;
while(1)
{
md=(l+r)/2;
if(l > r) break;
sum=0;
for(int i=0;i<n;i++)
{
if(tree[i]-md > 0)
sum+=(tree[i]-md);
}
if(sum < m)
{
r=md-1;
}
else if(sum > m)
{
l=md+1;
}
else
{
break;
}
}
cout<<md<<'\n';
return 0;
}
'백준 문제풀이' 카테고리의 다른 글
백준 1182번 부분수열의 합 소스 코드 - 비트마스크 (0) | 2022.01.06 |
---|---|
백준 2531번 회전초밥 소스 코드 (0) | 2022.01.06 |
백준 2622번 - 삼각형만들기 (0) | 2021.12.10 |
백준 13015번 - 별찍기 23 (0) | 2021.12.08 |
백준 10993번 - 별찍기 18 (0) | 2021.12.08 |