JH 개발 블로그
Softeer [HSAT 5회 정기 코딩 인증평가 기출] 성적 평가 자바 본문
https://softeer.ai/practice/6250
배열에 점수와 인덱스를 잘 담아서 정렬 하면 되는 문제였다.
1. 배열에 점수와 인덱스를 저장한다.
2. 배열을 내림차순 정렬한다. ( 점수 기준으로 )
3. 내림차순 정렬된 배열의 인덱스를 바탕으로 정답 배열의 인덱스에 rank를 매긴다. (내림차순 배열의 이전 요소가 지금 요소와 같다면 rank 값은 그대로, 아니라면 i+1)
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
// 점수, 인덱스를 담을 배열 생성
// 마지막 행은 total 점수
int[][][] arr = new int[4][n][2];
for (int i=0; i<3; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j=0; j<n; j++) {
int score = Integer.parseInt(st.nextToken());
// [0]은 점수
// [1]은 인덱스
arr[i][j][0] = score;
arr[i][j][1] = j;
// 토탈 스코어
arr[3][j][0] += score;
arr[3][j][1] = j;
}
}
// 내림차순 정렬
for (int i=0; i<4; i++) {
Arrays.sort(arr[i],(a,b) -> b[0] - a[0]);
}
// 정답 배열
int[][] answer = new int[4][n];
for (int i=0; i<4; i++) {
// 매 대회마다 1로 초기화
int rank = 1;
answer[i][arr[i][0][1]] = rank;
for (int j=1; j<n; j++) {
// 이전이랑 점수가 다르면 j+1
if (arr[i][j][0] != arr[i][j-1][0]) {
rank = j+1;
}
int idx = arr[i][j][1];
answer[i][idx] = rank;
}
}
for (int i=0; i<4; i++) {
for (int j=0; j<n; j++) {
System.out.print(answer[i][j] + " ");
}
System.out.println();
}
}
}
'코딩테스트 > Softeer' 카테고리의 다른 글
[HSAT 3회 정기 코딩 인증평가 기출] 플레이페어 암호 자바 (0) | 2024.06.22 |
---|---|
[HSAT 7회 정기 코딩 인증평가 기출] 순서대로 방문하기 자바 (0) | 2024.06.22 |
Comments