https://www.acmicpc.net/problem/2805
2805번: 나무 자르기
첫째 줄에 나무의 수 N과 상근이가 집으로 가져가려고 하는 나무의 길이 M이 주어진다. (1 ≤ N ≤ 1,000,000, 1 ≤ M ≤ 2,000,000,000) 둘째 줄에는 나무의 높이가 주어진다. 나무의 높이의 합은 항상 M보
www.acmicpc.net
메모
앞서 푼 #1654 랜선자르기 문제와 흡사한 문제이다.
이 문제를 이해하면 어렵지 않게 풀 수 있음
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st=new StringTokenizer(bf.readLine());
int N=Integer.parseInt(st.nextToken());
int M=Integer.parseInt(st.nextToken());
int[] arr=new int[N];
long max=0;
st=new StringTokenizer(bf.readLine());
for(int i=0;i<N;i++) {
arr[i]=Integer.parseInt(st.nextToken());
if(arr[i]>max) {
max=arr[i];
}
}
max++;
long min=0;
long mid=0;
while(min<max) {
mid=(min+max)/2;
long length=0;
for(int i=0;i<N;i++) {
if(arr[i]-mid>0){
length+=(arr[i]-mid);
}
}
if(length<M) {
max=mid;
}
else {
min=mid+1;
}
}
System.out.println(max-1);
}
}
'백준' 카테고리의 다른 글
입출력 정리 (0) | 2023.02.08 |
---|---|
이런저런 문제들 #10799: 쇠막대기 (0) | 2022.09.28 |
이분탐색/삼분탐색 #1654: 랜선 자르기 (0) | 2022.08.31 |
이분탐색/삼분탐색 #1920: 수 찾기 (0) | 2022.08.27 |
그래프 문제(bfs,dfs) #10451: 순열 사이클 (0) | 2022.08.26 |