알고리즘 문제 해결/BOJ

[그리디] BOJ 2212 센서

jmkimmessi 2022. 2. 8. 00:00
반응형

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

 

2212번: 센서

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

www.acmicpc.net

 

문제 해결 알고리즘

 

각 센서간의 차이를 구한 것들을 배열에 넣고 정렬한 후 큰 순서대로 차이들을 K-1개씩 센서 중에 가장 큰 정수거리와 가장 작은 정수거리를 뺀 값에 빼준다. 그 값을 출력한다.

 

소스 코드

 

#include <bits/stdc++.h>
using namespace std;

int main(){
    
    int N, K; cin >> N >> K;
    
    if(N == 1) {
        cout << 0;
        return 0;
    }
    
    vector<int> sensor(N);
    vector<int> dis(N-1);
    for(int i=0;i<N;i++){
        cin >> sensor[i];
    }
    
    sort(sensor.begin(), sensor.end());
    
    int result = sensor[N-1] - sensor[0];

    for(int i=0;i<N-1;i++){
        dis[i] = sensor[i+1] - sensor[i];
    }
    
    sort(dis.begin(), dis.end());
    
    for(int i=N-1;i>=N-K;i--){
        result -= dis[i];
    }
    
    cout << result;
    
}
반응형