문제가 수식으로 되어있으면 참 보기 쉬울탠데
한글로 되어있으니
줄도 길고, 읽기 참 귀찮죠??
그림을 그릴게요~
다음과 같이 N개 나무들이 있습니다
이렇게 동일한 높이로 자릅시다
잘린 검은 부분의 합이 M을 넘어야합니다
위 조건을 만족하는 높이의 최대값을 구합시다
코드입니다
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
int[] tree = new int[a];
int min = 0;
int max = 0;
st = new StringTokenizer(br.readLine());
for(int i=0; i<a; i++) {
tree[i] = Integer.parseInt(st.nextToken());
if(max < tree[i]) {
max = tree[i];
}
}
while(min < max) {
int mid = (min + max) / 2;
long sum = 0;
for(int i=0; i<a; i++) {
if(tree[i] - mid > 0) {
sum += (tree[i] - mid);
}
}
if(sum<b) {
max = mid;
}else {
min = mid + 1;
}
}
System.out.println(min - 1);
}
}
저는 이 문제 푸는데 좀 힘들었습니다 ㅠㅠ
조건을 잘 생각하고
어? 이런 경우에는 어떻게 출력을 해야하지? 고민하고
시간초과!!!!!
모든 문제에는 '알고리즘 분류' 항목에
약간의 힌트가 들어가는데
저는 그걸 안보고 풀거든요,,,그래서 좀 힘들었습니다
while(min < max) 부분이 이분탐색을 이용하는 부분입니다
'백준 문제풀기 > JAVA' 카테고리의 다른 글
[백준 2869 JAVA 자바] 달팽이는 올라가고 싶다 (0) | 2023.08.08 |
---|---|
[백준 2839 JAVA 자바] 설탕 배달 (0) | 2023.08.08 |
[백준 2798 JAVA 자바] 블랙잭 (0) | 2023.08.08 |
[백준 2753 JAVA 자바] 윤년 (0) | 2023.08.08 |
[백준 2752 JAVA 자바] 세수정렬 (0) | 2023.08.08 |