본문 바로가기
👩‍💻 Programming/Coding Test 문제 풀이

[Baekjoon] 2110 공유기 설치(자바스크립트/NodeJs)

by codingBear 2023. 1. 30.
728x90
반응형
 

1715번: 카드 정렬하기

정렬된 두 묶음의 숫자 카드가 있다고 하자. 각 묶음의 카드의 수를 A, B라 하면 보통 두 묶음을 합쳐서 하나로 만드는 데에는 A+B 번의 비교를 해야 한다. 이를테면, 20장의 숫자 카드 묶음과 30장

www.acmicpc.net


👨‍💻 문제

도현이의 집 N개가 수직선 위에 있다. 각각의 집의 좌표는 x1, ..., xN이고, 집 여러개가 같은 좌표를 가지는 일은 없다.

도현이는 언제 어디서나 와이파이를 즐기기 위해서 집에 공유기 C개를 설치하려고 한다. 최대한 많은 곳에서 와이파이를 사용하려고 하기 때문에, 한 집에는 공유기를 하나만 설치할 수 있고, 가장 인접한 두 공유기 사이의 거리를 가능한 크게 하여 설치하려고 한다.

C개의 공유기를 N개의 집에 적당히 설치해서, 가장 인접한 두 공유기 사이의 거리를 최대로 하는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 가장 인접한 두 공유기 사이의 최대 거리를 출력한다.

예제 입력 1

5 3
1
2
8
4
9

예제 출력 1

3

힌트

공유기를 1, 4, 8 또는 1, 4, 9에 설치하면 가장 인접한 두 공유기 사이의 거리는 3이고, 이 거리보다 크게 공유기를 3개 설치할 수 없다.


정답 코드


문제 풀이

 문제 자체보다는 말이 어려워서 애를 먹었다. 문제에는 '가장 인접한 두 공유기 사이의 최대 거리'라고 나와 있지만 실제로는 '주어진 c만큼 공유기를 설치할 수 있는 최대 간격'을 구하는 문제이다. 이진 탐색을 활용하면 이 같은 정답을 쉽게 구할 수 있다.

 우선 주어진 좌푯값을 활용해 설치 간격의 최대 범위를 구한다. 예제를 기준으로는 1 ~ 8이다. 여기서 최대 간격이 8인 이유는 1번 집에서 8만큼 떨어진 위치에 공유기를 설치한다면 9번 집에 설치할 수 있기 때문이다. 그런 다음 설치를 시도할 설치 간격(gap)를 구한다. 설치 범위가 [1, 8]라면 설치 간격은 그 중간값인 4이다. 최소 4만큼씩 띄워서 집집마다 설치를 한다면 두 집(1, 8 or 1, 9)밖에 설치하지 못한다. 따라서 설치 범위를 [1, 3]으로 감소시킨 뒤 다시 설치 간격을 2로 갱신하여 설치를 시도한다. 만약 최대 설치 개수 이상이 된다면 반대로 설치 간격을 증가시킨다. 이 같은 작업을 반복하면 주어진 집 좌표에 공유기 3개를 설치할 수 있는 최대 설치 간격은 3이 나온다.


함께 보기

 

[🥈1 / 백준 2110 / 파이썬] 공유기 설치

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

my-coding-notes.tistory.com

 

728x90
반응형

댓글