https://www.acmicpc.net/problem/2012
해당 문제는 기본적인 그리디 알고리즘 문제로 배열을 Sort하여 학생들의 등수를 구하고 Sort를 통해 구한 등수와 학생들의 예상 등수의 차이를 합하면 되는 간단한 문제이다.
🚨 단, 모든 학생이 1등을 희망하고 학생 수가 많을 경우 불만도의 값이 int범위를 넘어갈 수 있어서 결과를 담는 변수는 long타입으로 만들어줘야한다.
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws Exception {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
int[] arr = new int[N+1];
arr[0] = 0;
for (int i=1; i<=N; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(arr);
long disappointment = 0;
for (int i= 1; i<=N; i++) { // i는 실제 등수
disappointment += Math.abs(i-arr[i]);
}
System.out.println(disappointment);
}
}