๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

[๊ฒฐ์ •์•Œ๊ณ ๋ฆฌ์ฆ˜] 10.๋งˆ๊ตฌ๊ฐ„ ์ •ํ•˜๊ธฐ

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 1. 26.

<<ํ’€์ด>>

 

๊ฒฐ์ • ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ™œ์šฉํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค.

 

์ด ๋ฒˆ ๋ฌธ์ œ๋Š” ๊ฑฐ๋ฆฌ์— ๋Œ€ํ•ด ๊ฐ€์žฅ ์ž‘์€ ๊ฑฐ๋ฆฌ 1๊ณผ ์ตœ๋Œ€ ๊ฑฐ๋ฆฌ 9๋ฅผ lt์™€ rt๋กœ ๋‘๊ณ , mid = (lt + rt) / 2๋ฅผ ํ™œ์šฉํ–ˆ๋‹ค.

 

1 ์—์„œ 9 ์‚ฌ์ด์— ์ •๋‹ต์ด ๋ฌด์กฐ๊ฑด ์žˆ๋‹ค๋Š” ์ „์ œ๊ฐ€ ๊น”๋ ค์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

์ด์ œ ๊ตฌํ•œ mid๋กœ ์‹ค์ œ ๊ฑฐ๋ฆฌ๋ฅผ ๋นผ๊ฐ€๋ฉด์„œ ๋น„๊ตํ–ˆ๋Š”๋ฐ, ์šฐ์„  ๊ฐ€์žฅ ์ฒซ๋ฒˆ์งธ 1 ์œ„์น˜์— ๋ง์„ ๋‘๊ณ  ์‹œ์ž‘ํ–ˆ๋‹ค. 1์— ๋‘๊ณ  ์‹œ์ž‘ํ•ด์•ผ ๊ณต๊ฐ„ํ™•๋ณด์— ์œ ๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋‹ค์Œ mid ๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ํฌ๋ฉด ์ค‘์ง€ํ•˜๊ณ  ๊ทธ ์œ„์น˜์— ๋ง์„ ๋’€๋‹ค. ๊ทธ๋ฆฌ๊ณ  1 ์œ„์น˜์—์„œ ๋ถ€ํ„ฐ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ•˜๋˜ ๊ฒƒ์„ ๋ง์„ ๋‘” ์œ„์น˜๋กœ ๋ณ€๊ฒฝํ•œ ๋’ค ๊ฐ™์€ ์ž‘์—…์„ ๋ฐ˜๋ณตํ–ˆ๋‹ค.

 

๊ทธ๋ ‡๊ฒŒ ํ•ด์„œ ๋‚˜์˜จ ๊ฐ’์ด ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š” ๋ง์ด ์‹ค์ œ ๋„ฃ์œผ๋ ค๋Š” ๋ง์˜ ์ˆ˜ ๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ํฌ๋ฉด ๊ทธ ๊ฐ’์€ ์œ ๋ ฅํ•œ ํ›„๋ณด๊ฐ€ ๋œ๋‹ค.

 

๋งŒ์•ฝ ํฌ๊ฑฐ๋‚˜ ๊ฐ™๋‹ค๋ฉด, mid ์ดํ•˜์˜ ๊ฐ’์€ ๋ฌด์กฐ๊ฑด ๋˜๊ธฐ ๋•Œ๋ฌธ์— mid ์•„๋ž˜๋Š” ๋ฌด์‹œํ•œ๋‹ค. ๊ทธ๋ž˜์„œ lt๋ฅผ mid + 1๋กœ ๋‹ค์‹œ ์ดˆ๊ธฐํ™” ์‹œํ‚จ๋‹ค.

 

์ด ๊ณผ์ •์„ lt > rt ๋˜๊ธฐ ์ „๊นŒ์ง€ ์ง„ํ–‰ํ•œ๋‹ค.

 

์ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•ต์‹ฌ์€ ์ •๋ ฌ๋œ ๊ฐ’๊ณผ ๊ทธ ์ •๋ ฌ๋œ ๊ฐ’ ์•ˆ์— ๋ฌด์กฐ๊ฑด ๋‹ต์ด ์žˆ์„ ๋•Œ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค !! ์ด์ ์„ ์ž˜ ๊ธฐ์–ตํ•ด๋‘ฌ์„œ ๋‚˜์ค‘์— ๋˜ ์จ๋จน์ž ใ…Žใ…Ž

 

import java.util.Arrays;
import java.util.Scanner;

class Main{

    private int total(int[] arr, int mid) {
        int em = arr[0];
        int count = 1;
        for(int i = 1; i < arr.length; i++) {
            if(arr[i] - em >= mid) {
                count++;
                em = arr[i];
            }
        }
        return count;
    }
    private int solution(int n, int m, int[] arr) {
        Arrays.sort(arr);
        int rt = Arrays.stream(arr).max().getAsInt();
        int lt = Arrays.stream(arr).min().getAsInt();
        int answer = 0;
        while(lt <= rt) {
            int mid = (rt + lt) / 2;
             if(total(arr, mid) >= m) {
                 answer = mid;
                 lt = mid + 1;
            } else rt = mid - 1;
        }
        return answer;

    }



    public static void main(String[] args) {
        Main T = new Main();
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int m = in.nextInt();
        int[] arr = new int[n];
        for(int i = 0; i < n; i++) {
            arr[i] = in.nextInt();
        }

        System.out.println(T.solution(n, m, arr));
    }
}

๋Œ“๊ธ€