문제 풀이

[c++] 백준 13164 행복 유치원

미분당한 적분상수 2023. 3. 7. 00:30

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

 

13164번: 행복 유치원

입력의 첫 줄에는 유치원에 있는 원생의 수를 나타내는 자연수 N(1 ≤ N ≤ 300,000)과 나누려고 하는 조의 개수를 나타내는 자연수 K(1 ≤ K ≤ N)가 공백으로 구분되어 주어진다. 다음 줄에는 원생들

www.acmicpc.net

#include<bits/stdc++.h>
using namespace std;
vector<int> child, divide;
vector<pair<int,int>> dist;
int main(){
    ios::sync_with_stdio(0);
    cin.tie(0);
    //입력 받기
    int n,k; cin>>n>>k;
    for(int i=0; i<n; i++){
        int a; cin>>a;
        child.push_back(a);
    }
    //이웃한 아이들의 키 차이 저장
    for(int i=1; i<n; i++)
        dist.push_back({child[i]-child[i-1],i});
    //키 차이가 큰 곳 부터 k-1번 자른다
    //(자르는 위치 저장)
    sort(dist.begin(), dist.end());
    for(int i=n-2; i>=n-k; i--){
        divide.push_back(dist[i].second-1);
    }
    //자른 위치를 불러오며 1번째 키와 자른 부분의 키의 차를 ans에 더한다
    int index=0, ans=0;
    for(auto i : divide){
        ans+=child[i]-child[index];
        index = i+1;
    }
    //마지막 연산 처리
    ans+=child[n-1]-child[index];
    cout << ans;
    return 0;
}