이 문제에서 알아야할 점은 두가지이다.
1.이분탐색으로 풀 것
2.long타입 선언
일단 문제를 보자
이전에 공부했던 이분탐색을 생각해냈다.
특정한 값을 구해야할 때 그 시간을 줄여주는 좋은 방법이다.
이문제에서 long타입을 써야 하는 이유는 나무의 높이가 최대 1,000,000,000이기 때문이다
int형으로는 계산할 수가 없다.
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n= sc.nextInt();
long height = sc.nextInt();
long[] tree = new long[n];
long max=0;
for(int i=0;i<n;i++){
tree[i]= sc.nextInt();
if(i==0){
max = tree[i];
continue;
}
if(tree[i]>max)
max= tree[i];
}
long start = 0;
long last =max;
while(start<=last){
long mid = (start+last)/2;
long result=0;
for(int i=0;i<n;i++){
if(tree[i]>mid) {
result += tree[i] - mid;
}
}
if(result>=height){
start = mid+1;
}
else{
last = mid-1;
}
}
System.out.println(last);
}
}
'Computer Engineering > 알고리즘 테스트' 카테고리의 다른 글
백준[1213] -팰린드롬 만들기 (0) | 2021.02.27 |
---|---|
백준[10773]- 제로 (java) (0) | 2021.02.25 |
백준[1244]- 스위치 켜고 끄기 (0) | 2021.02.25 |
백준[1764]-듣보잡 (0) | 2021.02.05 |
백준[1417]- 국회의원 선거 (0) | 2021.02.05 |