본문 바로가기

백준/골드

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

문제링크 : https://www.acmicpc.net/problem/2212

 

2212번: 센서

첫째 줄에 센서의 개수 N(1 ≤ N ≤ 10,000), 둘째 줄에 집중국의 개수 K(1 ≤ K ≤ 1000)가 주어진다. 셋째 줄에는 N개의 센서의 좌표가 한 개의 정수로 N개 주어진다. 각 좌표 사이에는 빈 칸이 하나 있

www.acmicpc.net

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
const int MAX = 987654321;

int N, K, arr[10001], dist[10001];

int main()
{
    ios_base::sync_with_stdio(0); 
	cin.tie(0);

    cin >> N >> K;
    for(int i=0; i<N; i++) cin >> arr[i];
    sort(arr, arr+N);

    for(int i=0; i<N-1; i++) dist[i] = arr[i+1] - arr[i]; //거리 차이 구하기
    sort(dist, dist+N-1);
    
    int sum = 0;
    for(int i=0; i<N-K; i++) sum += dist[i]; //최소 거리 합 구하기

    cout << sum;

    return 0;
}

 

우선 입력받은 좌표에 대해 정렬을 시행해준다.

정렬한 좌표를 기준으로 해당 좌표 사이의 거리 차이 값을 구해서 따로 배열에 저장해둔다.

거리 차이 값을 구한 배열을 다시 정렬을 해주고, K값에 비례하여 거리 차이가 작은 값 부터 더해주면 된다.

 

예제의 경우 다음과 같다.

6
2
1 6 9 3 6 7

정렬 좌표 : 1 3 6 6 7 9
거리 차이 : 2 3 0 1 2
거리 차이 정렬 : 0 1 2 2 3

거리 차이 값 총 갯수 : N-1
배제해야할 거리 차이 값 갯수 K-1 (기본 사용 1)
필요한 거리 차이 값 갯수 : N-1 - (K-1) = N-K

'백준 > 골드' 카테고리의 다른 글

[백준 11000번] 강의실 배정 (C++)  (0) 2024.03.21
[백준 2230번] 수 고르기 (C++)  (0) 2024.03.17
[백준 9024번] 두 수의 합 (C++)  (2) 2024.03.08
[백준 3020번] 개똥벌레 (C++)  (0) 2024.03.07
[백준 2470번] 두 용액 (C++)  (0) 2024.02.27