반응형
문제 링크 : 2805번: 나무 자르기 (acmicpc.net)
2805번: 나무 자르기
첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보
www.acmicpc.net
풀이 >
간단한 이분탐색 문제입니다
#include <bits/stdc++.h>
using namespace std;
int arr[1000000];
int N, M;
int bSearch(int end)
{
int start = 0;
int height = 0;
long long sum = 0;
while (start <= end) {
sum = 0;
height = (start + end) / 2;
for (int i = 0; i < N; i++) {
if (arr[i] > height)
sum += (arr[i] - height);
}
if (sum >= M) {
start = height + 1;
}
else {
end = height - 1;
}
}
return end;
}
int main(void)
{
scanf("%d %d", &N, &M);
for (int i = 0; i < N; i++)
scanf("%d", &arr[i]);
sort(arr, arr + N);
printf("%d", bSearch(arr[N-1]));
return 0;
}
반응형
'알고리즘 (백준) > BOJ 길라잡이 (1)' 카테고리의 다른 글
백준 1655 (가운데를 말해요) / C++ (0) | 2021.05.18 |
---|---|
백준 1715 (카드 정렬하기) / C++ (0) | 2021.05.14 |
백준 2512 (예산) / C++ (0) | 2021.05.12 |
백준 1654 (랜선 자르기) / C++ (0) | 2021.05.12 |
백준 1012 (유기농 배추) / C++ (0) | 2020.11.06 |