๊ธฐ๋ก๋ฐฉ

BOJ_2110 : ๊ณต์œ ๊ธฐ ์„ค์น˜ ๋ณธ๋ฌธ

CodingTest/Java

BOJ_2110 : ๊ณต์œ ๊ธฐ ์„ค์น˜

Soom_1n 2023. 4. 18. 23:42

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

2110๋ฒˆ: ๊ณต์œ ๊ธฐ ์„ค์น˜

์ฒซ์งธ ์ค„์— ์ง‘์˜ ๊ฐœ์ˆ˜ N (2 ≤ N ≤ 200,000)๊ณผ ๊ณต์œ ๊ธฐ์˜ ๊ฐœ์ˆ˜ C (2 ≤ C ≤ N)์ด ํ•˜๋‚˜ ์ด์ƒ์˜ ๋นˆ ์นธ์„ ์‚ฌ์ด์— ๋‘๊ณ  ์ฃผ์–ด์ง„๋‹ค. ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ N๊ฐœ์˜ ์ค„์—๋Š” ์ง‘์˜ ์ขŒํ‘œ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” xi (0 ≤ xi ≤ 1,000,000,000)๊ฐ€

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • N๊ฐœ์˜ ์ˆ˜์ง์„  ์œ„ ์ง‘๋“ค์˜ ์ขŒํ‘œ๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„๋‹ค.
    • C๊ฐœ์˜ ๊ณต์œ ๊ธฐ๋ฅผ ์„ค์น˜ํ•˜๋ ค๋Š”๋ฐ, ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ณต์œ ๊ธฐ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ตœ๋Œ€๋กœ ํ•˜๊ณ ์ž ํ•œ๋‹ค.
  • ๊ณต์œ ๊ธฐ์˜ ๊ฑฐ๋ฆฌ๋ฅผ ์ด๋ถ„ํƒ์ƒ‰๊ณผ ๊ฐ™์€ ํ˜•ํƒœ์ธ ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ์ƒ‰์œผ๋กœ ์ฐพ์•„๋‚ธ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
    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 C = Integer.parseInt(st.nextToken());
        int[] home = new int[N];
        for (int i = 0; i < N; i++) {
            home[i] = Integer.parseInt(br.readLine());
        }

        Arrays.sort(home);

        int start = 1;
        int end = home[N - 1] - home[0];
        int answer = 0;

        // ์ง‘๋“ค ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ ๊ธฐ์ค€์œผ๋กœ ์ด๋ถ„ํƒ์ƒ‰
        while (start <= end) {
            int mid = (start + end) / 2;
            int cnt = 1;
            int temp = home[0];
            for (int i = 1; i < N; i++) {
                if (home[i] - temp >= mid) {
                    cnt++;
                    temp = home[i];
                }
            }

            // ๊ณต์œ ๊ธฐ ๊ฑฐ๋ฆฌ ๋Š˜๋ ค์„œ ์žฌ์„ค์น˜ํ•ด๋ณด๊ธฐ
            if (cnt >= C) {
                answer = Integer.max(answer, mid);
                start = mid + 1;
            }
            // ๊ณต์œ ๊ธฐ ๊ฑฐ๋ฆฌ ์ค„์—ฌ์„œ ์žฌ์„ค์น˜ ํ•ด๋ณด๊ธฐ
            else end = mid - 1;
        }
        System.out.print(answer);
    }
}

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ์ž…๋ ฅ๋œ ์ง‘๋“ค์˜ ์ขŒํ‘œ๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.
  • ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•œ๋‹ค.
    • start๋Š” ๊ณต์œ ๊ธฐ ์‚ฌ์ด์˜ ์ตœ์†Œ๊ฑฐ๋ฆฌ, end๋Š” ๊ณต์œ ๊ธฐ ์‚ฌ์ด์˜ ์ตœ๋Œ€๊ฑฐ๋ฆฌ์ด๋‹ค.
    • ์ฒซ ๊ณต์œ ๊ธฐ๋Š” ์ฒซ ๋ฒˆ์งธ ์ง‘์— ๋†“๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.
    • ๋ฐ˜๋ณต๋ฌธ์—์„œ ๊ณต์œ ๊ธฐ ์‚ฌ์ด์˜ ๊ฑฐ๋ฆฌ๊ฐ€ mid๋ฅผ ๋„˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ cnt๋ฅผ ์„ผ๋‹ค.
    • cnt๊ฐ€ C ์ด์ƒ์ด๋ฉด, ์•„์ง ๋„ˆ๋ฌด ๊ฐ€๊น๋‹ค๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๊ณต์œ ๊ธฐ ๊ฑฐ๋ฆฌ๋ฅผ ๋Š˜๋ ค๋ณด๊ธฐ ์œ„ํ•ด start๋ฅผ mid+1๋กœ ์ฆ๊ฐ€์‹œํ‚จ๋‹ค.
    • cnt๊ฐ€ C๋ณด๋‹ค ์ž‘๋‹ค๋ฉด, ๋„ˆ๋ฌด ๋ฉ€๋‹ค๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ๊ณต์œ ๊ธฐ ๊ฑฐ๋ฆฌ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด end๋ฅผ mid-1๋กœ ๊ฐ์†Œ์‹œํ‚จ๋‹ค.

๐Ÿ”ธ end ๐Ÿ”ธ

  • ๋ฌธ์ œ ํ’€์ด ์ „๋žต์ด ๋– ์˜ค๋ฅด์ง€ ์•Š์•„์„œ ํ’€์ด๋ฅผ ๋ณด๋ฉด์„œ ํด๋ก ์ฝ”๋”ฉ์œผ๋กœ ํ’€์—ˆ๋‹ค.
  • ์ด๋ถ„ํƒ์ƒ‰์ด ์˜ค๋žœ๋งŒ์ด๋ผ ์–ด์ƒ‰ํ•˜๋ฉด์„œ, ๋งค๊ฐœ๋ณ€์ˆ˜ ํƒ์ƒ‰์€ ๋„ˆ๋ฌด ์ƒ์†Œํ•ด์„œ ํ’€์ด๋ฅผ ์ดํ•ดํ•˜๊ธฐ๋„ ์–ด๋ ค์› ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.

728x90

'CodingTest > Java' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ_2252 : ์ค„ ์„ธ์šฐ๊ธฐ  (0) 2023.04.22
Lv.1 : ๋‘˜๋งŒ์˜ ์•”ํ˜ธ  (0) 2023.04.20
BOJ_1806 : ๋ถ€๋ถ„ํ•ฉ  (0) 2023.04.18
BOJ_2589 : ๋ณด๋ฌผ์„ฌ  (0) 2023.04.18
BOJ_11279 : ์ตœ๋Œ€ ํž™  (0) 2023.04.18