본인의 등수를 낮게 예상한 사람일 수록 실제 등수를 작게 매기는 것이 불만도가 최소이다.
예상 등수를 오름차순으로 정렬하고, 실제 등수(1, 2, 3...)를 빼서 절댓값을 합한다.
인물과 등수를 매칭해서 등수에 관한 수열을 출력하는 것이 아니라, 불만도 총합을 출력하는 것이기 때문에 단순히 정렬을 해도 무관하다.
입력 값의 범위 때문에 int가 아니라 long을 사용해야 한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class BOJ_4_2012{
public static void main(String[] args) throws NumberFormatException, IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(bf.readLine());
int[] arr = new int[N+1];
for(int i=1; i<N+1; i++) {
arr[i]=Integer.parseInt(bf.readLine());
}
long ans = 0;
Arrays.sort(arr); // 오름차순 정렬, 역순으로 체크해보자
for (int i = 1; i < N+1; i++) {
ans = ans + Math.abs(arr[i]-i);
}
System.out.println(ans);
}
}
long 자료형 활용에 대해 배웠다. 단순히 기계적으로 int라고 선언하지 말 것!
https://velog.io/@dev_su_noh/백준-1758번-알바생-강호
이 문제를 풀고나서 푸니까 금방 풀렸다! 띠용,, 했음