Algorithm/Baekjoon
[Algorithm]Baekjoon 2212번 :: 센서
MaxLevel
2024. 1. 26. 02:20
https://www.acmicpc.net/problem/2212
2212번: 센서
첫째 줄에 센서의 개수 N(1 ≤ N ≤ 10,000), 둘째 줄에 집중국의 개수 K(1 ≤ K ≤ 1000)가 주어진다. 셋째 줄에는 N개의 센서의 좌표가 한 개의 정수로 N개 주어진다. 각 좌표 사이에는 빈 칸이 하나 있
www.acmicpc.net
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
using namespace std;
int n, k, input;
vector<int> arr;
vector<int> distanceGaps;
int main()
{
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
cin >> n >> k;
if (k >= n)
{
cout << 0;
return 0;
}
for (int i = 0; i < n; ++i)
{
cin >> input;
arr.push_back(input);
}
sort(arr.begin(), arr.end());
int prevPosition = arr[0];
for (int i = 1; i < arr.size(); ++i)
{
distanceGaps.push_back(arr[i] - prevPosition);
prevPosition = arr[i];
}
sort(distanceGaps.rbegin(), distanceGaps.rend());
int answer = 0;
for (int i = k - 1; i < distanceGaps.size(); ++i)
{
answer += distanceGaps[i];
}
cout << answer;
}
|
cs |
집중국을 설치했을 때 모든 센서를 커버할 경우의 최소커버길이값을 구하는 문제이다.
집중국은 최대 k개 설치할 수 있고, 집중국의 개수 k개가 센서개수 n개보다 같거나 많으면 각 센서마다 다 설치해버리면 되기때문에 그냥 0을 출력하면 된다.
센서위치는 중구난방으로 주기 때문에 먼저 오름차순정렬을 한번 해준다.
이후 첫번째 센서부터, 바로 오른쪽에있는 센서까지의 거리값을 다 저장해준다. (distanceGaps)
그리고 내림차순으로 정렬을 해준다.
그러면 distanceGaps에는 거리값이 가장 큰것부터 들어있을 것이다. 이 거리값들은, 집중국을 한개 설치할때마다 건너뛸 수 있는 값이다.
거리가 아주 먼 센서가 있다고 하더라도, 집중국을 설치해버리면 아예 사라지는 값이 된다. 거리가 먼 센서에 설치해버리면 되니까.