개발/백준

[백준] 2212번. 센서 (C++)

yun000 2024. 11. 14. 15:42

문제

https://www.acmicpc.net/problem/2212

 

어려운 문제는 아닌데 뭔가 이해하는데 오래걸렸다.

아래와 같이 생각하니 한방에 이해가 갔다

 

주의사항

K값이 N값보다 클 경우를 생각해야한다!!! 이걸 생각 못해서 런타임 에러 났다.

결과값은 long long으로

 

풀이

 

예시 2번)

3 6 7 8 10 12 14 15 18 20에 센서들이 있다.

센서들 사이의 거리를 확인한다. 3 1 1 2 2 2 1 3 2

이것을 내림차순 정렬한다. 3 3 2 2 2 2 1 1 1

K-1 즉 4개를 삭제한다 2 2 1 1 1

이것을 다 합하면 result 7 이 나온다

 

센서들 사이의 거리가 긴부분은 나눠서 집중국을 설치해주면 되기 때문이다.

 

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
	int N, K,num;
	cin >> N >> K;

	//K>=N/////////////////////////////////
	if (K >= N) {cout << "0";return 0;	}

	//INPUT////////////////////////////////
	vector<int>g;
	for (int i = 0; i < N; i++)
	{
		cin >> num;
		g.push_back(num);
	}
	sort(g.begin(), g.end());
	g.erase(unique(g.begin(), g.end()), g.end());
	

	//DISTANCE/////////////////////////////
	vector<long long>dis;
	for (int i = 0; i < g.size()-1; i++)
	{ dis.push_back(g[i + 1] - g[i]); }
	sort(dis.begin(), dis.end(),greater<int>());
	dis.erase(dis.begin(), dis.begin() + (K - 1));


	//RESULT///////////////////////////////
	long long result = 0;
	for (int i = 0; i < dis.size(); i++) { result += dis[i]; }
	cout << result;
}