문제 출처
https://www.acmicpc.net/problem/1654
1654번: 랜선 자르기
첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그 후 K줄에 걸쳐 이미 가지고 있는 각 랜선의 길이가 센티미터 단위의 정수로 입력된다. 랜선의 길이는 231-1보다 작거나 같은 자연수이다.
www.acmicpc.net
접근 방식 및 풀이
- 1~k 배열의 가장 큰 값의 중간값으로 가장 큰 랜선의 길이를 찾아간다.
- 코드는 아래 블로그에서 참고했다.
https://ukyonge.tistory.com/25
#백준_1654 랜선 자르기 - Java
# 분류 : 이진 탐색 # 최대 랜선 길이를 찾는 것이므로, count가 조건과 같다고 return 하여 문제를 접근하였으나 틀렸고 Count를 맞춰도 최대 길이를 찾아야 하기 때문에 추가적으로 left = Middle + 1 로 주어..
ukyonge.tistory.com
소스 코드
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[] arr = new long[k];
long max = 0;
for (int i = 0; i <k ; i++) {
arr[i] = sc.nextLong();
max = Math.max(max, arr[i]);
}
long start =1;
long end =max;
while (start<=end){
long count =0;
long mid = (start+end)/2;
for (int i = 0; i <k ; i++) {
count += arr[i]/mid;
}
if(count < n){
end=mid-1;
}else{
start=mid+1;
}
}
System.out.println(end);
}
}
결과
'Competition > Baekjoon' 카테고리의 다른 글
[백준] 2146번 다리만들기 (0) | 2020.03.25 |
---|---|
[백준] 10451번 순열사이클 (0) | 2020.03.24 |
[백준] 2261번 자바 (0) | 2020.03.23 |