_

Always be tactful

프로그래밍/풀었어, 백준

[Java] 백준 10814번: 나이순 정렬

funczun 2025. 1. 22. 01:22
2차원 배열
import java.util.*;

public class Problem10814 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        String[][] infos = new String[N][2];

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

        // 나이순 정렬
        Arrays.sort(infos, new Comparator<String[]>() {
            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(infos[i][0] + " " + infos[i][1]);
        }

        sc.close();
    }
}

 

 2차원 배열을 생성해 나이와 이름 정보를 넣고, 이후 compare() 메서드에서 object1과 object2를 비교해 오름차순으로 정렬한다. 평범한 방법이다.


클래스
import java.util.*;

class Person {
    int age;
    String name;

    // 생성자
    Person(int age, String name) {
        this.age = age;
        this.name = name;
    }

    // toString() 메서드
    @Override
    public String toString() {
        return age + " " + name;
    }
}

public class Problem10814 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();

        // 사람 리스트 생성
        List<Person> people = new ArrayList<>();

        for (int i = 0; i < N; i++) {
            int age = sc.nextInt();
            String name = sc.next();
            people.add(new Person(age, name));
        }

        // 나이순 정렬
        people.sort(Comparator.comparingInt(person -> person.age));

        // 결과 출력
        for (Person person : people) {
            System.out.println(person);
        }

        sc.close();
    }
}

 

 중첩 클래스 사용해 보았다. 위 코드에서 볼 수 있는 두 가지 특징은 아래와 같다.


*Comparator.comparingInt()

 

 두 객체를 비교하기 위한 Comparator 객체를 생성하는 메서드이다. 이 메서드는 정수 값을 반환하는 함수를 인자로 받아 해당 값을 기준으로 객체들을 비교한다. 위 코드에서는 'person -> person.age' 부분이 해당 함수이며 (람다 표현식), 쉽게 말해 Person 객체인 person에서 age 값을 추출해 비교하도록 만든다.


*toString()

 

 자바에서 모든 클래스는 Object 클래스를 상속받는다. 기본적으로 Object 클래스의 toString() 메서드는 '클래스 이름@메모리 주소' 형식으로 객체 정보를 반환한다. 그러나 toString() 메서드를 오버라이드하면, 객체를 출력할 때 클래스 이름과 메모리 주소 대신, 사용자가 정의한 형식으로 객체의 정보를 출력한다.



 상속과 메서드 오버라이딩 관련한 자세한 내용은 따로 정리하도록 하겠다.

728x90