홍시홍의 프로그래밍

[백준 2012] 등수 매기기 본문

알고리즘 문제풀이/백준

[백준 2012] 등수 매기기

홍시홍 2020. 3. 30. 20:47

분류 : 정렬

 

요구사항

원하는 등수와 부여받은 등수의 차이가 최소가 되게 정렬하기

 

풀이

오름차순으로 정렬하고 현재  index랑 원하는 등수의 차이를 구하면 최소가 된다

맞왜틀은 출력은 long long 형이여야한다

0+1+2+............+50000 은 큰 수이다

 

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;
struct go {
	int x;
	int index;
};
int n;
//go map[500500];
vector<go> map;
bool com(go a, go b) {
	if (a.x < b.x) return true;
	return false;
}
int main() {
	scanf("%d", &n);
	for (int i = 0; i < n; i++) {
		int x;
		scanf("%d", &x);
		map.push_back({ x,i + 1 });
	}

	sort(map.begin(), map.end(),com);
	long long sum = 0;
	for (int i = 0; i < n; i++) {
		sum += abs(map[i].x - (i+1));
	}
	cout << sum << endl;
}

'알고리즘 문제풀이 > 백준' 카테고리의 다른 글

[백준 2406] 안정적인 네트워크  (0) 2020.03.31
[백준 2230] 수 고르기  (0) 2020.03.30
[백준 1063] 킹  (0) 2020.03.30
[백준 11812] K진 트리  (0) 2020.03.30
[백준 1726] 로봇  (0) 2020.03.29
Comments