본문 바로가기

백준/실버

[백준 2012번] 등수 매기기 (C++)

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

 

2012번: 등수 매기기

첫째 줄에 자연수 N이 주어진다. (1 ≤ N ≤ 500,000) 둘째 줄부터 N개의 줄에 걸쳐 각 사람의 예상 등수가 순서대로 주어진다. 예상 등수는 500,000 이하의 자연수이다.

www.acmicpc.net

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

int N, arr[500001];
ll result;

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

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

    for(int i=1; i<=N; i++)
    {
        result += abs(arr[i]-i); //불만도
    }

    cout << result;

    return 0;
}

 

정렬 후 배열과 i=1~N까지의 차이값을 구하여 저장해두면 된다.

주의해야 할 것이 차이값을 저장하는 변수의 최대 합이 50만*50만까지 가능하므로 long long으로 선언해주어야 한다.