https://softeer.ai/practice/6250
1. 아이디어
참가자의 각 대회에서 등수와 모든 대회의 점수의 합의 등수를 출력해야하는 문제다. 참가자 번호, 참가자 점수, 참가자 등수를 필드로 갖는 클래스와 정렬을 통해 해결했다.
2. 문제풀이
주어진 입력값을 받은 후 이를 참가자의 3가지 정보를 갖는 노드 배열로 반환하는 init 메서드를 활용했다. 노드 배열은 입력으로 참가자 번호와 참가자 점수는 알 수 있으므로 참가자 점수로 정렬을 해서 참가자의 등수를 구했고 이를 다시 참가자 번호로 정렬해서 원래 순서를 유지하도록 했다.
3. 코드
import java.io.*;
import java.util.*;
public class Main {
private static class Node {
// 참가자 번호
int person;
// 참가자 점수
int num;
// 참가자 등수
int order;
public Node(int person, int num) {
this.person = person;
this.num = num;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int N = Integer.parseInt(br.readLine());
int[][] map = new int[3][N];
int[] total = new int[N];
for (int i = 0; i < 3; i++) {
st = new StringTokenizer(br.readLine());
for (int j = 0; j < N; j++) {
int num = Integer.parseInt(st.nextToken());
map[i][j] = num;
total[j] += num;
}
}
for (int i = 0; i < 3; i++) {
Node[] arr = init(N, map[i]);
for (Node node : arr) {
sb.append(node.order).append(" ");
}
sb.append("\n");
}
Node[] arr = init(N, total);
for (Node node : arr) {
sb.append(node.order).append(" ");
}
sb.append("\n");
bw.write(sb.toString());
bw.flush();
}
private static Node[] init(int N, int[] arr) {
Node[] nodeArr = new Node[N];
for (int i = 0; i < N; i++) {
nodeArr[i] = new Node(i, arr[i]);
}
Arrays.sort(nodeArr, (o1, o2) -> Integer.compare(o2.num, o1.num));
int before = nodeArr[0].num;
nodeArr[0].order = 1;
for (int i = 1; i < N; i++) {
if (nodeArr[i].num == before) nodeArr[i].order = nodeArr[i - 1].order;
else nodeArr[i].order = i + 1;
before = nodeArr[i].num;
}
Arrays.sort(nodeArr, (o1, o2) -> Integer.compare(o1.person, o2.person));
return nodeArr;
}
}
4. 후기
'코딩테스트 준비 > 소프티어' 카테고리의 다른 글
[소프티어] 6257번 - 통근버스 출발 순서 검증하기 [Java] (0) | 2025.02.07 |
---|---|
[소프티어] 6251번 - 업무 처리 [Java] (1) | 2025.02.06 |
[소프티어] 6277번 - 사물인식 최소 면적 산출 프로그램 [Java] (0) | 2025.02.06 |
[소프티어] 6247번 - 자동차 테스트 [Java] (0) | 2025.02.06 |
[소프티어] 6246번 - 순서대로 방문하기 [Java] (0) | 2025.02.06 |