
-Code
import java.util.*;
import java.io.*;
public class BOJ1654 {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int cableCnt = Integer.parseInt(st.nextToken());
int needCableCnt = Integer.parseInt(st.nextToken());
// 최대 길이를 구하면서 배열에 저장
int maxLangth = 0;
int[] lanCables = new int[cableCnt];
for (int i = 0; i < cableCnt; i++) {
lanCables[i] = Integer.parseInt(br.readLine());
maxLangth = Math.max(maxLangth, lanCables[i]);
}
// 출력
System.out.println(getMaxCableLength(maxLangth, needCableCnt , lanCables));
}
private static long getMaxCableLength(int maxLangth, int needCableCnt, int[] lanCables) {
// 이분 탐색으로 최대 길이 구하기
long answer = 0;
long left = 1, right = maxLangth;
// 왼쪽 포인터가 오른쪽 포인터 이하인 경우 반복
while (left <= right) {
// 중간 지점 계산
long mid = (left + right) / 2;
// 만들 수 있는 케이블 갯수 비교후 포인터 변경
if (getCableCnt(mid, lanCables) < needCableCnt) {
// 해당 길이로 만들 수 있는 케이블 갯수가 필요한 케이블이
// 적은 경우 mid 감소를 위한 right 값을 mid - 1로 변경
right = mid - 1;
} else {
// 만들수 있는 갯수가 필요 케이블 보다 많으면 최대값 비교 및 저장
answer = Math.max(answer, mid);
// 크기를 크게하기 위해 왼쪽 포인터를 mid + 1로 변경
left = mid + 1;
}
}
return answer;
}
// 만들수 있는 케이블 갯수 구하기
private static int getCableCnt(long length, int[] lanCables) {
int cnt = 0;
for (int cable : lanCables) {
cnt += (int) (cable / length);
}
return cnt;
}
}
처음에 메소드 반환을 이상하게 해서 틀렸습니다. 그냥 변수를 하나두고 가능한 모든 길이를 비교하면서 끝까지 비교 후 값을 반환해주면 되었습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [백준/Java] 2502번 떡 먹는 호랑이 (0) | 2026.01.09 |
|---|---|
| [백준/Java] 11727번 2×n 타일링 2 (0) | 2026.01.09 |
| [프로그래머스/Java] 다리를 지나는 트럭 (1) | 2026.01.09 |
| [백준/Java] 21617번 Crazy Fencing (0) | 2026.01.09 |
| [백준/Java] 11057번 오르막 수 (1) | 2026.01.09 |