https://www.acmicpc.net/problem/1654
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
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 k = Integer.parseInt(st.nextToken());
int n = Integer.parseInt(st.nextToken());
long[] arr = new long[k];
for(int i=0; i<k; i++){
arr[i] = Long.parseLong(br.readLine());
}
Arrays.sort(arr);
long left = 1; // 랜선 길이는 자연수
long right = arr[k-1];
while(left<=right){
long mid = (left+right)/2; // 자르는 길이
int cnt = 0;
for(long length : arr){
cnt += length / mid;
}
if(cnt >= n){ // 자른 개수가 n보다 같거나 크면
left = mid+1; // 자르는 길이를 더 크게 해줘야 함
}else{ // 자른 개수가 n보다 작으면
right = mid-1; // 자르는 길이를 더 작게 해줘야 함
}
}
System.out.println(right);
}
}
left 를 처음에 0으로 해서 런타임 에러가 떴다.
애초에 문제 조건을 보면 랜선 길이는 자연수기 때문에 0으로 시작하면 안되기도 하고,
만약에 right가 1인 경우
mid를 구할 때 (0+1)/2 = 0이 되어 length에서 0을 나누게 되어 런타임에러가 뜬것이였다.
'ALGORITHM' 카테고리의 다른 글
[JAVA] 백준 2343 - 기타 레슨 (0) | 2022.12.29 |
---|---|
[JAVA] 백준 2110 - 공유기 설치 (0) | 2022.12.29 |
[JAVA] 백준 2805 - 나무 자르기 (0) | 2022.12.26 |
[JAVA] 백준 2146 - 다리 만들기 (0) | 2022.12.23 |
[JAVA] 백준 16964 - DFS 스페셜 저지 (0) | 2022.12.23 |