본문 바로가기
백준 문제 풀이

<코테 챌린지> 나이순 정렬 (백준 10814번)

by _비니_ 2024. 10. 9.

❓ 문제

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

 

📥 입력

첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000)

둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수이고, 이름은 알파벳 대소문자로 이루어져 있고, 길이가 100보다 작거나 같은 문자열이다. 입력은 가입한 순서로 주어진다.

 

📤 출력

첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순, 나이가 같으면 가입한 순으로 한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다.

 

📥 예제 입력

3
21 Junkyu
21 Dohyun
20 Sunyoung

 

📤 예제 출력

20 Sunyoung
21 Junkyu
21 Dohyun

 

👩🏻‍💻 내 코드

package baekjoon.코테챌린지;

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

public class 나이순정렬 {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);

        int N = in.nextInt();
        String[][] members = new String[N][2];

        for(int i = 0; i < N; i++) {
            members[i][0] = in.next();
            members[i][1] = in.next();
        }

        Arrays.sort(members, (a, b) -> {
            int ageSorting = Integer.parseInt(a[0]) - Integer.parseInt(b[0]);
            return ageSorting;
        });

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

    }
}

 

💡 공부 내용 < 람다 함수 >


  • 람다 함수 형식 : (매개변수) -> { 함수의 내용 }
  • Integer.parseInt(a[0]) - Integer.parseInt(b[0])두 정수 값을 빼는 연산
    • 만약 a[0]이 21이고 b[0]이 20이면, 이 연산은 21 - 20 = 1이 됩니다. 양수가 반환되면 a가 b보다 뒤로 가도록 정렬된다.
    • 반대로 a[0]이 20이고 b[0]이 21이면, 20 - 21 = -1이 되며 음수가 반환되고, 이 경우 a가 b보다 앞으로 가도록 정렬된다.
    • 만약 두 값이 같다면(예: a[0] == b[0]), 0이 반환되며 순서가 유지된다. 🌟🌟 자바의 Arrays.sort()는 stable sort이므로, 나이가 같을 때는 원래의 입력 순서대로 유지된다.
반응형