1 분 소요



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



📌 문제

문제 유형

  • 정렬


문제 설명

  • 나이를 기준으로 오름차순 정렬
  • 나이가 같으면 먼저 가입한 사람이 먼저 출력


입출력 예시

입력

3
21 Junkyu
21 Dohyun
20 Sunyoung

출력

20 Sunyoung
21 Junkyu
21 Dohyun



🔍 문제 풀이

배열 정렬 메서드

  • Arrays.sort()는 배열을 정렬할 때 쓰는 메서드
  • 첫 번째 인자는 정렬할 배열이고, 두 번째는 정렬 방법(기준)을 설정하는 Comparator
  • 예를 들어, 내림차순으로 정렬하고 싶을 땐 아래와 같이 하면 됨

    Arrays.sort(arr, Comparator.reverseOrder());
    


Comparator

Arrays.sort(arr, Comparator.comparingInt(a -> Integer.parseInt(a[0])));
  • Comparator는 두 객체를 비교해 정렬 순서를 결정 (뜻: Comparator - 비교기)
  • comparingInt() 메서드는 정수값을 비교할 때 쓰이며, 정수형으로 변환된 값을 기준으로 정렬 (뜻: comparing - 비교하는)


람다 표현식

(a -> Integer.parseInt(a[0]))

  • a는 배열의 각 요소 (arr[i])로, 여기서는 String[] 타입 (arr의 타입이 String[][] 이기 때문)
  • 예를 들어 {나이, 이름} 형태
  • 따라서 a[0]을 기준으로 정렬하려면 Integer.parseInt(a[0])는 각 요소의 첫 번째 항목(나이)을 정수로 변환하여 비교 기준으로 사용



💻 전체 코드

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());


        // 배열에 나이와 이름을 저장
        String[][] arr = new String[n][2];
        for(int i = 0; i < n; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());

            arr[i][0] = st.nextToken(); // age
            arr[i][1] = st.nextToken(); // name
        }

        // 나이순으로 정렬, 같은 나이면 입력 순서 유지 (안정정렬)
        Arrays.sort(arr, Comparator.comparingInt(a -> Integer.parseInt(a[0])));

        // 결과 출력
        StringBuilder sb = new StringBuilder();
        for(String[] person : arr) { //  person: 각 사람의 [나이, 이름] 정보를 담은 배열 (e.g., person = ["21", "Junkyu"])
            sb.append(person[0]).append(" ").append(person[1]).append("\n");
        }

        System.out.println(sb);
    }
}

arr가 2차원 배열 (String[][])이면, arr의 각 요소는 1차원 배열 (String[])



💭 느낀 점

  • 평소에 파이썬으로만 문제를 풀다가 자바로 처음 접근해보니 낯설고 어렵게 느껴졌다.
  • 특히 배열 선언이나 Comparator 문법이 익숙하지 않아서 헷갈리지만, 반복하면 익숙해지겠지



🔁 복습 템플릿

import java.io.*;
import java.util.*;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        String[][] arr = new String[n][2];
        for(int i = 0; i < n; i++){
            StringTokenizer st = new StringTokenizer(br.readLine());

            arr[i][0] = st.nextToken(); // age
            arr[i][1] = st.nextToken(); // name
        }


        // 정렬


        // 결과 출력


    }
}


카테고리:

업데이트:

댓글남기기