in.add()
[1654] 랜선 자르기 본문
문제 링크 : https://www.acmicpc.net/problem/1654
1654번: 랜선 자르기
첫째 줄에는 오영식이 이미 가지고 있는 랜선의 개수 K, 그리고 필요한 랜선의 개수 N이 입력된다. K는 1이상 10,000이하의 정수이고, N은 1이상 1,000,000이하의 정수이다. 그리고 항상 K ≦ N 이다. 그
www.acmicpc.net
문제 해결 방법
이분 탐색으로 구현했습니다.
놓쳤던 부분
- 랜선의 길이는 231-1보다 작거나 같은 자연수이다.
int 범위를 벗어날 수 있기 때문에 long을 써줘야 합니다. 또 초기 min 값을 0이 아닌 1로 주어야 합니다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int K = sc.nextInt();
long N = sc.nextInt();
long[] lan = new long[K];
long max = -1;
for (int i = 0; i < K; i++) {
lan[i] = sc.nextInt();
max = Math.max(max, lan[i]);
}
long min = 1;
while (min <= max) {
long length = (max + min) / 2;
int cnt = 0;
for (int i = 0; i < K; i++) {
cnt += lan[i] / length;
}
if (cnt >= N) min = length + 1;
else max = length - 1;
}
System.out.println(max);
}
}
'Algorithm > BOJ' 카테고리의 다른 글
[2012] 등수 매기기 (0) | 2021.09.10 |
---|---|
[3085] 사탕 게임 (0) | 2021.09.09 |
[16236] 아기 상어 (0) | 2021.09.04 |
[14889] 스타트와 링크 (0) | 2021.09.03 |
[1916] 최소비용 구하기 (0) | 2021.09.01 |
Comments