728x90
반응형
이번 문제는 k개의 랜선에서 N개로 최대 길이를 만드는 문제입니다.
최대로 큰 값을 찾는 방법은 Math 라이브러리를 사용했어요.
max = Math.max(max,cable[i])는 max와 cable[i]와 값을
비교하며 더 큰 값을 max 넣는 방식입니다.
1. 먼저 K와 N값을 입력받습니다.
2. K 중에서 최대 길이의 랜선을 찾습니다.
3. 최대 케이블을 이진 탐색으로 값을 찾습니다.
4. 만약 total>=N이면 더 큰 값이 될 수도 있기 때문에 low의 값을 middle로 설정합니다.
5. total <=N이면 길이가 더 작아야 하기 때문에 high 값을 middle로 합니다.
6. low 값이 high보다 커지면 더 반복할 수 없으니 반복을 빠져나옵니다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int K = sc.nextInt();
int N = sc.nextInt();
long[] cable = new long[K];
long max = 0;
for (int i=0; i<K; i++) {
cable[i] = sc.nextLong();
max=Math.max(max,cable[i]);
}
long high=max;
long low=1;
while(low<=high){
long middle=(high+low)/2;
long total=0;
for(int j=0;j<K;j++){
total+=cable[j]/middle;
}
if(total>=N){
low=middle+1;
}else{
high=middle-1;
}
}
System.out.println(high);
sc.close();
}
}
728x90
반응형
'프로그래밍_백준 > Java' 카테고리의 다른 글
Java) 1764 듣보잡 (0) | 2023.09.16 |
---|---|
Java) 10814 나이순 정렬 (2차원 배열 정렬) (0) | 2023.09.16 |
Java) 7568번 덩치 (0) | 2023.09.16 |
Java) 18110번 SOLVED.AC (절사평균) (0) | 2023.09.01 |
Java) 1676번 팩토리얼 0의 개수 (0) | 2023.08.30 |