[백준/2012] 등수 매기기 - JAVA

이지환·2024년 2월 18일

알고리즘(백준) 💻

목록 보기
40/80
post-thumbnail

📌 문제

알고리즘 분류 : 그리디
난이도 : 실버3
출처 : 백준 - 등수 매기기

🦧 문제 풀이 접근

불만도의 합을 최소로 하려면 입력받을 숫자를 오름차순으로 정렬 해야 한다.
정렬된 값과 해당 순번의 차의 절대값을 통해 불만도의 합을 구한다.
이때 N이 500,000명이고 모두가 1등을 예상할 경우 124,999,750,000이 되므로 long 타입으로 sum값을 설정해야한다.

(499,999 + 0) * 500,000 / 2 = 124,999,750,000

💻 code

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        int N = Integer.parseInt(br.readLine());
        int[] numArr = new int[N];
        for(int i=0;i<N;i++) {
            numArr[i] = Integer.parseInt(br.readLine());
        }
        Arrays.sort(numArr);
        long sum = 0;
        for(int i=0;i<N;i++) {
            sum+= Math.abs(numArr[i]-i-1);
        }
        System.out.println(sum);
    }
}

🥇 결과

🎓 느낀점

어려운 문제는 아니지면 자료형을 long타입으로 설정하는 센스가 필요한 문제다.

profile
takeitEasy

0개의 댓글