문제 : 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();
}
}
'PS > BOJ' 카테고리의 다른 글
[자바] 백준 25191 - 치킨댄스를 추는 곰곰이를 본 임스 (boj java) (0) | 2022.05.16 |
---|---|
[자바] 백준 14426 - 접두사 찾기 (boj java) (0) | 2022.05.16 |
[자바] 백준 10025 - 게으른 백곰 (boj java) (0) | 2022.05.14 |
[자바] 백준 13552 - 구와 쿼리 (boj java) (0) | 2022.05.13 |
[자바] 백준 14425 - 문자열 집합 (boj java) (0) | 2022.05.13 |
댓글