Competition/Baekjoon

[백준] 2110번 자바 공유기 설치

bisi 2020. 3. 31. 13:49
문제 출처 

https://www.acmicpc.net/problem/2110

 

2110번: 공유기 설치

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

www.acmicpc.net

 

 

 

접근 방식 및 풀이

- 이분탐색으로 거리의 절반을 기준으로 집을 찾아갔다.

- 오늘도 마이구님의 블로그 참고!

https://mygumi.tistory.com/301

 

백준 2110번 공유기 설치 :: 마이구미

이 글은 백준 알고리즘 2110번 "공유기 설치" 를 풀이한다. 풀이 방법으로는 이분(이진) 탐색을 사용한다. 문제 링크 - https://www.acmicpc.net/problem/2110 이분 탐색 - http://mygumi.tistory.com/72 도현이의..

mygumi.tistory.com

 

 

 

소스 코드 
import java.util.Arrays;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int c = sc.nextInt();

        int[] arr = new int [n];
        for (int i = 0; i <n ; i++) {
            arr[i] = sc.nextInt();
        }
        Arrays.sort(arr);
        int left = 1;
        int right = arr[n-1]-arr[0];
        int d = 0;
        int ans = 0;

        while(left <= right){
            int mid= (left + right) /2;
            int start = arr[0];
            int count =1;
            for (int i = 0; i <n ; i++) { //집집마다 검색함.
                d= arr[i]-start;
                if(d >= mid){ //만약 첫번째 집과의 거리가 더 크다면 찾았다고 count 올려주고, 내가 찾는집에 이번 집을 넣어준다.
                    count++;
                    start = arr[i];
                }
            }

            if(count>=c){
                ans = mid;
                left = mid + 1;
            }else{
                right = mid-1;
            }
         }
        System.out.println(ans);
    }
}

 

 

 

 

결과 

'Competition > Baekjoon' 카테고리의 다른 글

[백준] 2447번 자바 별찍기  (2) 2020.03.31
[백준] 1780번 종이의 개수  (0) 2020.03.31
[백준] 18016번 자바 숫자 카드2  (0) 2020.03.31