티스토리 뷰

알고리즘

2012번 등수 매기기

wlsdl00 2024. 1. 2. 10:20

문제


https://www.acmicpc.net/problem/2012

코드


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 bf = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(bf.readLine());
        int[] rank = new int[N];
        for (int i = 0; i < N; i++) {
            rank[i] = Integer.parseInt(bf.readLine());
        }
        Arrays.sort(rank);

        long complain = 0;
        for (int i = 0; i < N; i++) {
            int actualRank = i + 1;
            if (rank[i] != actualRank) {
                complain += Math.abs(actualRank - rank[i]);
            }
        }

        System.out.println(complain);
    }
}

풀이 방법


  • 등수를 기준으로 내림차순 정렬을 한다.
  • 실제 등수를 정렬 후 배열의 인덱스 + 1로 계산한다.
  • 입력값인 예상 등수와 실제 등수가 같지 않다면, 그 차이를 불만도 complain 에 더한다.
  • 위 과정을 반복해서 총합을 구한다.

핵심 포인트


  • 등수를 기준으로 내림차순 정렬을 해야 인덱스와 등수를 일치시켜 불만도의 차이를 계산할 수 있다.
  • 불만도는 - 연산 이후에 절대값을 씌워야 한다. 문제에도 명시되어있으니 명심하자.
  • 결과 complain 에 대해서는 int가 아닌 long을 사용해야 한다!!! (이 부분에서 1시간 날림)

보완할 점 / 느낀 점


  • 짧은 시간 내에 구현을 성공하였으나, 자료형 관련 오류가 발생하여 한참 해맸다.
  • 처음에 제출을 했을 때 퍼센트가 안올라가고 바로 틀렸습니다! 문구가 떠서 로직이 잘못된줄 알고 싹 갈아엎고 다른 방식으로 구현하려했다. 그러다가 질문 게시판을 보고 자료형 문제인 것을 깨달았다.
  • 문제를 풀 떄 자료형에 대해서도 고려하자.

'알고리즘' 카테고리의 다른 글

2217번 로프  (1) 2024.01.03
1931번 회의실 배정  (0) 2024.01.02
11399번 ATM  (1) 2024.01.02
2839번 설탕배달  (1) 2024.01.02
7568번 덩치  (0) 2024.01.02
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함