본문 바로가기
PS/BOJ

[자바] 백준 24155 - 得点 (Score) (boj java)

by Nahwasa 2022. 5. 15.

문제 : boj24155

 

  다음의 표를 보자.

(A)는 애초에 입력이 내림차순이고 겹치는 점수가 없는 경우이다. 이 경우 등수는 순서대로가 될 것이다.

(B)는 내림차순이지만, 겹치는 점수가 있는 경우이다. 이 경우 이전과 점수가 같다면 등수도 이전과 동일하고, 이전과 점수가 다를 경우 현재 자신의 위치를 출력하면 순서대로 등수를 출력할 수 있다.

  이 문제의 경우 처음에 정렬이 되어 들어오지 않는다. 따라서 (C)와 같이 정렬한 후 등수를 매겨보자. (A), (B)와 달리 '학생'부분의 숫자가 뒤죽박죽인 것을 알 수 있다. 정렬 후 등수를 매기는 것은 (A), (B)와 동일하다.

이후 (D)와 같이 학생 번호 순서대로 다시 정렬하면 처음 입력된 순서대로 등수를 출력할 수 있다.

 

코드 : github

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

public class Main {
    class Student implements Comparable<Student> {
        int score, idx;
        public Student(int score, int idx) {
            this.score = score;
            this.idx = idx;
        }
        @Override
        public int compareTo(Student o) {
            return o.score-this.score;
        }
    }
    private void solution() throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());
        int[] answer = new int[n];
        Student[] arr = new Student[n+1];
        arr[0] = new Student(200, 0);
        for (int i = 1; i <= n; i++) arr[i] = new Student(Integer.parseInt(br.readLine()), i-1);
        Arrays.sort(arr);
        for (int i = 1, ranking = 1; i <= n; i++) {
            if (arr[i-1].score!=arr[i].score) {
                ranking = i;
            }
            answer[arr[i].idx] = ranking;
        }
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++) {
            sb.append(answer[i]).append('\n');
        }
        System.out.print(sb);
    }
    public static void main(String[] args) throws Exception {
        new Main().solution();
    }
}

 

댓글