반응형
https://www.acmicpc.net/problem/2212
2212번: 센서
첫째 줄에 센서의 개수 N(1 ≤ N ≤ 10,000), 둘째 줄에 집중국의 개수 K(1 ≤ K ≤ 1000)가 주어진다. 셋째 줄에는 N개의 센서의 좌표가 한 개의 정수로 N개 주어진다. 각 좌표 사이에는 빈 칸이 하나 있
www.acmicpc.net
1.문제설명
각 센서들의 좌표를 정렬하고 각 좌표간의 간격을 구해서 다시 정렬하여
가장 긴 간격을 k의 개수에 따라서 알맞게 빼주면 답을 구할 수 있습니다.
좌표는 중복된 값이 들어올 수 있으므로 set 자료구조를 이용하면 편하게 구할 수 있습니다.
6
2
1 6 9 3 6 7

위 예제에서는 센서간의 간격의 길이가 3이 제일 길기 때문에
전체 간격의 길이인 9-1=8에서 3을 빼주면
나머지 센서를 다 포괄할 수 있게 됩니다.
2.문제풀이코드 C++
#include <bits/stdc++.h>
using namespace std;
int n, k;
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cin >> n >> k;
set<int> num;
for (int i = 0; i < n; i++) {
int tmp;
cin >> tmp;
num.insert(tmp);
}
n = num.size();
if (n <= k) {
cout << 0;
return 0;
}
vector<int> v(num.begin(), num.end());
vector<int> interval;
int ans = 0;
for (int i = 0; i < n - 1; i++) {
ans += v[i + 1] - v[i];
interval.push_back(v[i + 1] - v[i]);
}
sort(interval.begin(), interval.end());
for (int i = 0; i < k-1; i++) {
ans -= interval[interval.size() - 1 - i];
}
cout << ans << '\n';
return 0;
}

반응형
'Algorithm > problem' 카테고리의 다른 글
백준 1493번 : 박스 채우기 - 그리디 , 분할정복 C++ (0) | 2022.03.08 |
---|---|
백준 13904번 : 과제 - 그리디 C++ (0) | 2022.03.07 |
백준 1700번 : 멀티탭 스케줄링 - 그리디 C++ (0) | 2022.03.07 |
백준 11000번 : 강의실 배정 - 우선순위 큐 C++ (0) | 2022.03.07 |
백준 2503번 : 숫자 야구 - 브루트포스 완전 탐색 (0) | 2022.03.06 |