‡ CODING TEST STUDY ‡/º 백준

[백준 | Java Silver II] (#13702) 이상한 술집

Trudy | 송연 2024. 7. 23. 04:22

문제

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

https://velog.io/@ilil1/%EB%B0%B1%EC%A4%80-13702%EB%B2%88-%EC%9D%B4%EC%83%81%ED%95%9C%EC%88%A0%EC%A7%91-java

 

[백준] 13702번 이상한술집 java

이분 탐색 (Binary Search, Parametric Search) : 막걸리 N 주전자를 주문하고, 자신을 포함한 친구들 K명에게 막걸리를 똑같은 양으로 나눠주려고 할 때, 막걸리의 최대값을 구하는 문제입니다.

velog.io