예은이의 이것저것

[백준 10825] 국영수 in JAVA 본문

나는 컴공이다/Algorithm in JAVA

[백준 10825] 국영수 in JAVA

김짱짱 2021. 1. 24. 23:26

www.acmicpc.net/problem/10825

 

10825번: 국영수

첫째 줄에 도현이네 반의 학생의 수 N (1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 한 줄에 하나씩 각 학생의 이름, 국어, 영어, 수학 점수가 공백으로 구분해 주어진다. 점수는 1보다 크거나 같고, 1

www.acmicpc.net

※ 풀이 방법

 문제 풀이 방법은 어렵지 않았다. 주어진 네 가지 조건에 맞추어 데이터를 정렬하고, 각 학생의 이름을 순서대로 출력하면 되는 문제였다. 

 매우 직관적이지만 각 학생에 대한 데이터를 어떤 방식으로 저장할지, 어떻게 주어진 조건에 맞게 정렬할지가 조금 까다로운 부분이었다.

 

 학생의 이름(String), 국어 점수(int), 영어 점수(int), 수학 점수(int)를 모두 함께 저장해주어야했기 때문에 문자열 배열을 사용했고, 각 점수를 비교할 때는 Integer.parseInt() 메소드를 사용하여 비교해주었다. 

 

 정렬 조건이 네 가지나 되고 저장 방식이 문자열 배열이었다보니 원래 형태의 Arrays.sort() 메소드로는 해결할 수 없었고, comparator의 compare 메소드를 수정하여 해결할 수 있었다.

 

※ 문제 풀이 코드

사진으로 캡쳐해서 넣었었는데 이상해서 수정

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class BOJ_10825 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner input=new Scanner(System.in);
		
		int N=input.nextInt();
		
		String [][] student=new String[N][4];
		
		for(int i=0;i<N;i++) {
			student[i][0]=input.next();
			student[i][1]=input.next();
			student[i][2]=input.next();
			student[i][3]=input.next();
		}
		
		Arrays.sort(student,new Comparator<String[]>() {
			public int compare(String [] o1, String [] o2) {
				if(Integer.parseInt(o1[1])<Integer.parseInt(o2[1]))
					return 1;
				else if(o1[1].equals(o2[1])) {
					if (Integer.parseInt(o1[2])>Integer.parseInt(o2[2])) return 1;
					else if(o1[2].equals(o2[2])) {
						if(Integer.parseInt(o1[3])<Integer.parseInt(o2[3])) return 1;
						else if(o1[3].equals(o2[3])) {
							 if(o1[0].compareTo(o2[0])>0) return 1;
						}
					}
				}
				return -1;
			}
		});
		
		for(int i=0;i<N;i++)
			System.out.println(student[i][0]);
		
	}

}