๋ฌธ์ :
2110๋ฒ: ๊ณต์ ๊ธฐ ์ค์น
์ฒซ์งธ ์ค์ ์ง์ ๊ฐ์ N (2 ≤ N ≤ 200,000)๊ณผ ๊ณต์ ๊ธฐ์ ๊ฐ์ C (2 ≤ C ≤ N)์ด ํ๋ ์ด์์ ๋น ์นธ์ ์ฌ์ด์ ๋๊ณ ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์๋ ์ง์ ์ขํ๋ฅผ ๋ํ๋ด๋ xi (0 ≤ xi ≤ 1,000,000,000)๊ฐ
www.acmicpc.net
๋ถ์ :
์ด ๋ฌธ์ ๋ ๋ด ๊ธฐ์ค์ ์์ ์กฐ๊ธ ์ ๋ฐํ๋ (?) ์ด๋ถ(์ด์ง) ํ์ ๋ฌธ์ ์๋ค.
๋ฌธ์ ๋ฅผ ์ดํดํ๋๋ฐ์๋ ํท๊ฐ๋ ธ๋ค. ์ฒ์์ ์ ๋ ฌ์ ํ ๋ค start ์ end ๋ณ์๋ฅผ ๊ฐ๊ฒฉ์ ์ต์, ์ต๋ ๊ฑฐ๋ฆฌ๋ก ์ค์ ํด ๋๋ค ์ด ์์น๋ฅผ mid ๊ฐ ๋ณ๊ฒฝ์ ํตํด index ์์น๋ฅผ ๋ณ๊ฒฝ ์ํจ ๋ค start ๊ฐ end ์ธ๋ฑ์ค๋ณด๋ค ์ปค์ง๊ฒ ๋๋ฉด ์ข ๋ฃํ๋ค. ๋น๊ต ๊ธฐ์ค์ mid ๊ฐ์ผ๋ก ์ฒซ ์ง์ ๊ธฐ์ค์ผ๋ก for๋ฌธ์ ๋๋ฉฐ์ mid ๊ฐ๋ณด๋ค ํฌ๊ฒ ๋๋ฉด router๋ฅผ ์ธ์ด๋ค. ๋ค ๋๊ณ ๋๋ฉด ์ธ์ด ๋ผ์ฐ๋์ ๊ฐฏ์๊ฐ ์ธ์ฐ๊ธฐ๋ก ๋ช ์๋ ๋ผ์ฐํฐ์ ๊ฐฏ์๋ณด๋ค ๋ง์์ง ๋น๊ต ํ๋๋ฐ ํฌ๊ฒ ๋๋ค๋ฉด ๊ฐ๊ฒฉ์ ์ขํ๊ธฐ ์ํด start ๊ฐ์ mid ๊ฐ + 1๋ก ์ค์ ํ๋ค.
์ฆ, ๊ณต์ ๊ธฐ ๊ฐฏ์๊ฐ ๋ง๋ค --> ์ธ์ธ ๊ฐ๊ฒฉ์ ์ขํ๋ค.
๊ณต์ ๊ธฐ ๊ฐฏ์๊ฐ ์์ง ๋ชจ์๋ผ๋ค --> ๊ฐ๊ฒฉ์ ๋ํ ์ค์น ์๋ฅผ ์ฆ๊ฐ์ํจ๋ค.
ํ์ max_distance์๋ ๋ง์ง๋ง์ ๋น๊ตํ mid ๊ฐ ๊ณง ๊ฐ์ฅ ๋จผ ๊ฑฐ๋ฆฌ์ผํ ๋ฏ๋ก ์ด๋ฅผ ๋ฆฌํดํ๋ค.
c++ ์ฝ๋ :
//
// 2110_router.cpp
// SOMA๐ฉ๐ป๐ป
//
// Created by JoSoJeong on 2021/02/09.
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <math.h>
using namespace std;
int find_min_distance(int home, int router, int *arr){
int max_distance = 0;
int start = 1; int end = arr[home - 1] - arr[0]; // ๊ฐ๊ฒฉ ์ต์, ์ต๋ ๊ฑฐ๋ฆฌ
while(start <= end){
int mid = (start + end) / 2;
int set_router = arr[0]; //์ฒ์ ์ธ์ด ๋ผ์ฐํฐ
int count = 1; // ์ฒ์ ์ง count
for(int i = 1; i < home; i++){//์ฒซ์ง์ ์ ์ธํ ์ง์ ๋๋ฉด์ i ๋ก ๊ณต์ ๊ธฐ ์ธ์
int compare = arr[i] - set_router;
//๊ฐ์ฅ ๊ฐ๊น์ด ์ง ๊ฐ๊ฒฉ์ด ์ต์ํ mid๊ฐ ๋๋๋ก ์ค์ ํ๊ธฐ ์ํด์
if(compare >= mid){ // ๊ฐ๊ฒฉ์ด mid ๋ณด๋ค ํฌ๋ค๋ฉด ์ด๊ธฐ์ end ์ชฝ์ ๊ฐ๊น์ด ๊ฐ์ผ๋ก ์
ํ
set_router = arr[i]; //์ด๊ธฐ 8๋ก ์
ํ
count++;
}
}
if(count >= router) {
max_distance = mid;
start = mid + 1;
}else{
//์ค์นํ ๊ฒ ๋จ์์ผ๋ฏ๋ก ์ค์น ์ ์ฆ๊ฐ
end = mid - 1; // ๊ฐ๊ฒฉ์ ํ๋ ๊ฐ์ == ์ค์น ์ ์ฆ๊ฐ
}
}
return max_distance;
}
int main(){
int home, router, distance;
cin >> home >> router;
int *arr = new int[home];
for(int i = 0; i < home; i++){
cin >> arr[i];
}
sort(arr, arr + home);
distance = find_min_distance(home, router, arr);
cout << distance << endl;
return 0;
}
์์ผ๋ก๋ ๋ฌธ์ ํ๋ฉด ๋ฐ๋ก ๋ธ๋ก๊ทธ์ ์ฌ๋ ค์ผ๊ฒ ๋ค. ๋ฌธ์ ๋ค์ ๋ณด๋ ์ดํด๋ ๋จ์ด์ง๋ค ๊ธ๋ถ์ด ๊ฐ๋ค
'Algorithm๐ฐ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค] 19598 ์ต์ ํ์์ค ๊ฐ์ (0) | 2021.02.17 |
---|---|
[๋ฐฑ์ค] 10818 ์ต์, ์ต๋ (0) | 2021.02.16 |
[๋ฐฑ์ค] 2252 ์ค์ธ์ฐ๊ธฐ (0) | 2021.02.14 |
[๋ฐฑ์ค] 10828 stack (0) | 2021.02.06 |
[๋ฐฑ์ค] 1915 ๊ฐ์ฅ ํฐ ์ ์ฌ๊ฐํ DP (0) | 2021.02.05 |
๋๊ธ