문제 출처
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 |