백준 - 10825번 - 국영수

이상훈·2023년 4월 13일
0

10825번

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
import java.io.IOException;

public class Main {
	public static void main(String[] args) throws IOException {

		BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
		int num = Integer.parseInt(bf.readLine());

		String[][] score = new String[num][4];
		for (int i = 0; i<num; i++) {
			StringTokenizer st = new StringTokenizer(bf.readLine());
			score[i][0] = st.nextToken();
			score[i][1] = st.nextToken();
			score[i][2] = st.nextToken();
			score[i][3] = st.nextToken();
		}

		Arrays.sort(score, new Comparator<String[]>() {
			@Override
			public int compare(String[] o1, String[] o2) {
				if (Integer.parseInt(o1[1]) != Integer.parseInt(o2[1])) {
					return Integer.parseInt(o2[1]) - Integer.parseInt(o1[1]);
				} else if (Integer.parseInt(o1[2]) != Integer.parseInt(o2[2])) {
					return Integer.parseInt(o1[2]) - Integer.parseInt(o2[2]);
				} else if (Integer.parseInt(o1[3]) != Integer.parseInt(o2[3])) {
					return Integer.parseInt(o2[3]) - Integer.parseInt(o1[3]);
				} else {
//					return o1[0].charAt(0) - o2[0].charAt(0);
					return o1[0].compareTo(o2[0]);
				}
			}
		});

		StringBuilder sb = new StringBuilder();

		for (int i = 0; i<score.length; i++) {
			sb.append(score[i][0]).append('\n');
		}

		System.out.print(sb);
	}
}

풀이


  1. 이전에 풀어본 방법인 String[][]을 사용하여 풀겠다.

  2. 각 배열에 숫자를 입력받아 채워준다.

  3. 정렬하는 로직을 조건에 맞게 지정해준다.

    • 이때 메서드는 else로 끝나야한다.(else if로 끝나면 오류가 뜸)
    • 문자열을 비교하는 로직은 compareTo를 사용한다.
  4. StringBuilder에 문자를 저장해서 출력해준다.

0개의 댓글