개발자 톡

연습문제 톡 [HSAT 5회 정기 코딩 인증평가 기출] 성적 평가

런타임에러 뜨는데 도움 주시면 정말 감사하겠습니다.

등록일
2024-02-18 22:09:58
조회수
312
작성자
castela0119
import java.io.*;
import java.util.*;

public class Main {
	
	static int N;
	
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));


		N = Integer.parseInt(br.readLine());
		
		StringTokenizer st1 = new StringTokenizer(br.readLine());
		StringTokenizer st2 = new StringTokenizer(br.readLine());
		StringTokenizer st3 = new StringTokenizer(br.readLine());
		
		Student[] test1 = new Student[N];
		Student[] test2 = new Student[N];
		Student[] test3 = new Student[N];
		
		Student[] total = new Student[N];
		
		// test1 점수 배열
		for(int i=0; i<3; i++) {
			int num = Integer.parseInt(st1.nextToken());
			test1[i] = new Student(i, num);
		}
		
		// test2 점수 배열
		for(int i=0; i<3; i++) {
			int num = Integer.parseInt(st2.nextToken());
			test2[i] = new Student(i, num);
		}
		
		// test3 점수 배열
		for(int i=0; i<3; i++) {
			int num = Integer.parseInt(st3.nextToken());
			test3[i] = new Student(i, num);
		}
		
		for(int i=0; i<3; i++) {
			total[i] = new Student(i, 0);
		}
		
		// total 점수 배열 만들기
		for(int i=0; i<3; i++) {
			total[i].score += test1[i].score;
			total[i].score += test2[i].score;
			total[i].score += test3[i].score;
		}
		
		// test1 등수 매기기
		for(int i=0; i<N-1; i++) {
			for(int j=i+1; j<N; j++) {
				
				if(test1[i].score > test1[j].score) {
					test1[i].rank -= 1;
				} else if(test1[i].score < test1[j].score) {
					test1[j].rank -= 1;
				} else {
					test1[i].rank -= 1;
					test1[j].rank -= 1;
				}
			}
		}
		
		// test2 등수 매기기
		for(int i=0; i<N-1; i++) {
			for(int j=i+1; j<N; j++) {
				
				if(test2[i].score > test2[j].score) {
					test2[i].rank -= 1;
				} else if(test2[i].score < test2[j].score) {
					test2[j].rank -= 1;
				} else {
					test2[i].rank -= 1;
					test2[j].rank -= 1;
				}
			}
		}
		
		// test3 등수 매기기
		for(int i=0; i<N-1; i++) {
			for(int j=i+1; j<N; j++) {
				
				if(test3[i].score > test3[j].score) {
					test3[i].rank -= 1;
				} else if(test3[i].score < test3[j].score) {
					test3[j].rank -= 1;
				} else {
					test3[i].rank -= 1;
					test3[j].rank -= 1;
				}
			}
		}
		
		// total 등수 매기기
		for(int i=0; i<N-1; i++) {
			for(int j=i+1; j<N; j++) {
				if(total[i].score > total[j].score) {
					total[i].rank -= 1;
				} else if(total[i].score < total[j].score) {
					total[j].rank -= 1;
				} else {
					total[i].rank -= 1;
					total[j].rank -= 1;
				}
			}
		}
		
		StringBuilder sb1 = new StringBuilder();
		StringBuilder sb2 = new StringBuilder();
		StringBuilder sb3 = new StringBuilder();
		StringBuilder sb4 = new StringBuilder();
		
		for(int i=0; i<N; i++) {
			if(i == N-1) {
				sb1.append(test1[i].rank);
			} else {
				sb1.append(test1[i].rank).append(' ');
			}
		}
		
		for(int i=0; i<N; i++) {
			if(i == N-1) {
				sb2.append(test2[i].rank);
			} else {
				sb2.append(test2[i].rank).append(' ');
			}
		}
		
		for(int i=0; i<N; i++) {
			if(i == N-1) {
				sb3.append(test3[i].rank);
			} else {
				sb3.append(test3[i].rank).append(' ');
			}
		}
		
		for(int i=0; i<N; i++) {
			if(i == N-1) {
				sb4.append(total[i].rank);
			} else {
				sb4.append(total[i].rank).append(' ');
			}
		}
		
		System.out.println(sb1);
		System.out.println(sb2);
		System.out.println(sb3);
		System.out.println(sb4);
	}
	
	public static class Student{
		
		int idx = 0;
		int score = 0;
		int rank = N;

		public Student(int idx, int score) {
			this.idx = idx;
			this.score = score;
		}
	}
}
#[HSAT_5회_정기_코딩_인증평가_기출]_성적_평가

이 카테고리의 톡 더보기