Notice
Recent Posts
Recent Comments
Link
«   2024/12   »
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
Tags more
Archives
Today
Total
관리 메뉴

luke

[백준] - 나이순 정렬 (10814) (자바/Java) 본문

알고리즘문제/백준 문제(Java)

[백준] - 나이순 정렬 (10814) (자바/Java)

luke-king 2024. 3. 26. 17:26

 

 

 

 

 

https://www.acmicpc.net/problem/10814

 

10814번: 나이순 정렬

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을

www.acmicpc.net

 

 

 

 

 

 

 

 

 

문제.


 

 

 

 

 

 

 

 

풀이.


 

public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        String[][] arr = new String[N][2];

        for (int i = 0; i < N; i++) {
            arr[i][0] = sc.next(); //나이
            arr[i][1] = sc.next(); //이름
        }

        Arrays.sort(arr, new Comparator<String[]>() {
            @Override
            public int compare(String[] o1, String[] o2) {
                return Integer.parseInt(o1[0]) - Integer.parseInt(o2[0]);
            }

        });

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

        }
    }
}

 

나이순 정렬하기 문제.

이번 문제는 어렵다는 생각이 드는 문제였다...

아마 문제에 접근한 사람들 대부분은 나이순으로 정렬하려고 했을 거라는 생각이 든다.

 

1. 2차원 배열을 통해 나이, 이름을 입력받는다.

 

2. 정렬하기 위해 Arrays.sort()에 Comparator 의 compare 메서드를 구현해 정렬한다.

   compare 메서드는 양의 정수, 0, 음의 정수 중 하나를 반환해 양의 정수일 경우 두 객체의 위치를 바꿔주는 역할을 한다.

   즉 나이순으로 정렬하면서 이름은 따로 비교를 안 한다면 나이순으로 정렬하되, 나이가 같을 경우는 0이 반환되어 입력       순으로 정렬된다.

 

 

Comparator 란??

쉽게 말하자면 "자기 자신"과 "상대방"을 비교하는 것이다.

비교했을 때 내가 10이라고 가정해 보자 상대방이 4라고 가정하면 나 자신은 상대방 보다 값이 +6 만큼 크다.

반대로 상대망이 13일 경우 나 자신은 상대방 보다 값이 -2 만큼 작다. 같을 경우는 당연히 0이다.

그래서 위에 2번 설명을 했을대 양수, 음수를 말한 것이다. 

그러므로 o1 [0], o2 [0] 번 인덱스에서 비교했을 때 나이만 비교한다. 

 

 

※ 이해하면서 설명해보려 했지만 많이 부족한 부분이 많습니다. 혹여나 설명이 부족하거나 잘못된 점이 있다면 고치겠습니다!