티스토리 뷰

JAVA 풀이

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

public class _10825 {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer stk;
        int N = Integer.parseInt(br.readLine());
        String[][] arr = new String[N][4];

        for (int i = 0; i < N; i++) {
            stk = new StringTokenizer(br.readLine());
            arr[i][0] = (stk.nextToken());
            arr[i][1] = (stk.nextToken());
            arr[i][2] = (stk.nextToken());
            arr[i][3] = (stk.nextToken());
        }

        Arrays.sort(arr, new Comparator<String[]>() {
            @Override
            public int compare(String[] o1, String[] o2) {
                int kor1 = Integer.valueOf(o1[1]);
                int kor2 = Integer.valueOf(o2[1]);
                int eng1 = Integer.valueOf(o1[2]);
                int eng2 = Integer.valueOf(o2[2]);
                int math1 = Integer.valueOf(o1[3]);
                int math2 = Integer.valueOf(o2[3]);

                if (kor1 == kor2) {
                    if (eng1 == eng2) {
                        if (math1 == math2) {
                            return o1[0].compareTo(o2[0]);
                        }
                        return Integer.compare(math2, math1);
                    }
                    return Integer.compare(eng1, eng2);
                }
                //  base
                return Integer.compare(kor2, kor1);
            }
        });

        for (int i = 0; i < N; i++) {
            System.out.println(arr[i][0]/* + " " + arr[i][1]*/);
        }

    }
}

주로 사용하는 언어인 자바를 사용하여 문제를 풀어보았으나, 너무너무너무너무 복잡해진다.

이 문제를 통해 Arrays.sort()를 Comparator과 함께 사용할 수 있다는 것을 배웠고,

Integer.compare(a, b)에서 a와 b를 바꿔주면 역순으로 정렬이 됨을 알 수 있었다.

또한, Overide한 compare 메소드의 String배열 o1, o2는 각각 한 줄의 데이터(이름, 국, 영, 수)를 의미함을 알게되었다.

 

다만, 앞으로 알고리즘은 C++로 풀어야겠다고 다짐하게된 문제이기도 하다.

속도도 너무 느리고, 코드가 조잡해보인다. 물론 내가 하수인것도 한몫 했다.

 

C++ 풀이

는 나중에..

'알고리즘' 카테고리의 다른 글

플로이드 실수  (0) 2020.05.13
strlen()의 시간복잡도에 관하여..  (0) 2019.09.30
[Java] Arrays.sort vs Collections.sort  (0) 2019.08.28
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함