Algorithm/Problem Solving

[BOJ] 1654๋ฒˆ ๋žœ์„  ์ž๋ฅด๊ธฐ - JAVA(์ž๋ฐ”)

gangintheremark 2023. 9. 12. 17:44
728x90

๐Ÿ’ก ์ด๋ถ„ํƒ์ƒ‰(Binary Search) ๋ฌธ์ œ

 

โœ… ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ : N๊ฐœ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋žœ์„  ์ตœ๋Œ€ ๊ธธ์ด

  • lt = 1
  • rt = ๋žœ์„  ๊ธธ์ด ์ค‘ ๊ฐ€์žฅ ๊ธด ๊ฐ’  โžœ lt ~ rt ์‚ฌ์ด์˜ ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ’์ด ํ™•์‹คํ•˜๊ฒŒ ์žˆ๋‹ค.

์ž๋ฅผ ๋žœ์„ ์˜ ๊ธธ์ด๊ฐ€ mid์ด๋ฉด ๋‹ต์œผ๋กœ์จ ๊ฐ€๋Šฅํ•œ ์ˆซ์ž์ธ๊ฐ€ ๊ฒ€์ฆ โžœ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋žœ์„ ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜ ์ƒ์„ฑ

  • ์–ป์„ ์ˆ˜ ์žˆ๋Š” ๋žœ์„ ์˜ ๊ฐœ์ˆ˜๊ฐ€ N๊ฐœ ๋ณด๋‹ค ํฌ๊ฑฐ๋‚˜ ๊ฐ™์œผ๋ฉด ์ž๋ฅผ ๋žœ์„ ์˜ ๊ธธ์ด๋ฅผ ๋Š˜๋ ค๋„ ๋จ lt=mid+1
  • ๋ฐ˜๋Œ€๋ฉด ๋žœ์„ ์˜ ๊ธธ์ด ์ค„์ด๊ธฐ rt=mid-1

๐Ÿ‘จ๐Ÿป‍๐Ÿ’ป ์‹คํ–‰์ฝ”๋“œ

import java.util.*;
import java.io.*;

public class Main {
    private static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    private static StringTokenizer st;
    private static StringBuilder sb = new StringBuilder();
    private static int n, k;
    private static int[] arr;

    public static long count(long len) {
        long sum = 0;
        for(int i : arr) {
            sum += i / len;
        }
        return sum;
    }

    public static void main(String[] args) throws IOException {
        st = new StringTokenizer(br.readLine());
        k = Integer.parseInt(st.nextToken());
        n = Integer.parseInt(st.nextToken());
        arr = new int[k];

        int max = 0;
        for (int i = 0; i < k; i++) {
            arr[i] = Integer.parseInt(br.readLine());
            max = max < arr[i] ? arr[i] : max;
        }

        long answer = 0;
        long lt = 1;
        long rt = max;

        while(lt <= rt) {
            long mid = (lt + rt) /2;
            if(count(mid) >= n) {
                answer = mid;
                lt = mid + 1;
            } else {
                rt = mid - 1;
            }
        }
        System.out.println(answer);
    }
}
728x90