문제
https://www.acmicpc.net/problem/13702
접근
low 는 1, high는 주전자의 가장 큰 용량으로 초기화를 한 후 이분탐색을 진행한다.
또, long 타입을 써줬어야 했던 문제!
최종 코드
package week12.baek.july23;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class S13702 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int n = Integer.parseInt(st.nextToken());
int k = Integer.parseInt(st.nextToken());
long[] amount = new long[n];
long max = 0;
for (int i = 0; i < n; i++) {
amount[i] = Long.parseLong(br.readLine());
max = Math.max(max, amount[i]);
}
long low = 1;
long high = max;
long result = 0;
while (low <= high) {
long mid = (low + high) / 2;
long count = 0;
// 각 주전자마다 몇 명에게 줄 수 있는지 계산
for (long amt : amount) {
count += amt / mid;
}
// 모두에게 나눠 줄 수 있는지 확인
// 나눠 줄 수 있으면 -> 더 키우기
if (count >= k) {
result = mid;
low = mid + 1;
} else {
high = mid - 1;
}
}
System.out.println(result);
}
}
Reference
[백준] 13702번 이상한술집 java
이분 탐색 (Binary Search, Parametric Search) : 막걸리 N 주전자를 주문하고, 자신을 포함한 친구들 K명에게 막걸리를 똑같은 양으로 나눠주려고 할 때, 막걸리의 최대값을 구하는 문제입니다.
velog.io
'‡ CODING TEST STUDY ‡ > º 백준' 카테고리의 다른 글
[백준 | Java Silver IV] (#1158) 요세푸스 문제 (0) | 2024.07.25 |
---|---|
[백준 | Java Silver V] (#1475) 방 번호 (0) | 2024.07.25 |
[백준 | Java Silver IV] (#10816) 숫자 카드 2 (3) | 2024.07.23 |
[백준 | Java Silver IV] (#2417) 정수 제곱근 (1) | 2024.07.23 |
[백준 | Java Silver IV] (#1072) 게임 (0) | 2024.07.22 |