-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Gold IV] Title: 공유기 설치, Time: 128 ms, Memory: 3572 KB -BaekjoonHub
- Loading branch information
Showing
2 changed files
with
79 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,32 @@ | ||
# [Gold IV] 공유기 설치 - 2110 | ||
|
||
[문제 링크](https://www.acmicpc.net/problem/2110) | ||
|
||
### 성능 요약 | ||
|
||
메모리: 3572 KB, 시간: 128 ms | ||
|
||
### 분류 | ||
|
||
이분 탐색, 매개 변수 탐색 | ||
|
||
### 제출 일자 | ||
|
||
2024년 5월 4일 08:42:44 | ||
|
||
### 문제 설명 | ||
|
||
<p>도현이의 집 N개가 수직선 위에 있다. 각각의 집의 좌표는 x<sub>1</sub>, ..., x<sub>N</sub>이고, 집 여러개가 같은 좌표를 가지는 일은 없다.</p> | ||
|
||
<p>도현이는 언제 어디서나 와이파이를 즐기기 위해서 집에 공유기 C개를 설치하려고 한다. 최대한 많은 곳에서 와이파이를 사용하려고 하기 때문에, 한 집에는 공유기를 하나만 설치할 수 있고, 가장 인접한 두 공유기 사이의 거리를 가능한 크게 하여 설치하려고 한다.</p> | ||
|
||
<p>C개의 공유기를 N개의 집에 적당히 설치해서, 가장 인접한 두 공유기 사이의 거리를 최대로 하는 프로그램을 작성하시오.</p> | ||
|
||
### 입력 | ||
|
||
<p>첫째 줄에 집의 개수 N (2 ≤ N ≤ 200,000)과 공유기의 개수 C (2 ≤ C ≤ N)이 하나 이상의 빈 칸을 사이에 두고 주어진다. 둘째 줄부터 N개의 줄에는 집의 좌표를 나타내는 x<sub>i</sub> (0 ≤ x<sub>i</sub> ≤ 1,000,000,000)가 한 줄에 하나씩 주어진다.</p> | ||
|
||
### 출력 | ||
|
||
<p>첫째 줄에 가장 인접한 두 공유기 사이의 최대 거리를 출력한다.</p> | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,47 @@ | ||
#include <iostream> | ||
#include <vector> | ||
#include <algorithm> | ||
|
||
using namespace std; | ||
|
||
int main(void) | ||
{ | ||
int n, c, num, st, router, start, end, mid, ans = 0; | ||
cin >> n >> c; | ||
vector<int> pos; | ||
for (int i = 0; i < n; i++) | ||
{ | ||
cin >> num; | ||
pos.push_back(num); | ||
} | ||
sort(pos.begin(), pos.end()); | ||
start = 1; // 최소 거리 | ||
end = pos[n - 1] - pos[0]; // 최대 거리 | ||
|
||
while (start <= end) | ||
{ | ||
router = 1; | ||
mid = (start + end) / 2; | ||
st = pos[0]; | ||
|
||
for (int i = 1; i < n; i++) | ||
{ | ||
if (pos[i] - st >= mid) | ||
{ | ||
router++; | ||
st = pos[i]; | ||
} | ||
} | ||
|
||
if (router >= c) | ||
{ | ||
ans = max(ans, mid); | ||
start = mid + 1; | ||
} | ||
|
||
else | ||
end = mid - 1; | ||
} | ||
cout << ans; | ||
return 0; | ||
} |