알고리즘/BOJ

[BOJ] 2110. 공유기 설치

재담 2022. 3. 10. 00:24

문제 원본 : https://www.acmicpc.net/problem/2110

 

2110번: 공유기 설치

첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 xi (0 ≤ xi ≤ 1,000,000,000)가

www.acmicpc.net

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

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        StringTokenizer st = new StringTokenizer(br.readLine());
        int n = Integer.parseInt(st.nextToken());
        int c = Integer.parseInt(st.nextToken());

        int[] arr = new int[n];
        for (int i = 0; i < n; ++i) {
            arr[i] = Integer.parseInt(br.readLine());
        }

        Arrays.sort(arr);

        int min = 1;
        int max = arr[n - 1] - arr[0];
        int mid, ans = 0;

        while (min <= max) {
            mid = (max + min) / 2;

            int idx = 0;
            int cnt = 1;

            for (int i = 1; i < n; ++i) {
                if (arr[i] - arr[idx] >= mid) {
                    idx = i;
                    ++cnt;
                }
            }

            if (cnt < c) {
                max = mid - 1;
            } else {
                min = mid + 1;
                ans = mid;
            }
        }

        bw.write(String.valueOf(ans));

        bw.close();
        br.close();
    }
}
  • 이분 탐색 문제
  • 공유기 설치 가능 거리를 이분 탐색하는 문제이다.
  • C만큼 설치가 불가능하면 거리를 줄이고,
  • 설치가 가능하면 거리를 늘려서 최댓값을 찾는다.

'알고리즘 > BOJ' 카테고리의 다른 글

[BOJ] 2239. 스도쿠  (0) 2022.03.12
[BOJ] 2565. 전깃줄  (0) 2022.03.11
[BOJ] 17298. 오큰수  (0) 2022.03.08
[BOJ] 1922.네트워크 연결  (0) 2022.03.07
[BOJ] 1766. 문제집  (0) 2022.03.06