[Java] BOJ 10814: 나이순 정렬, 2차원 배열

2025. 1. 22. 01:22·Engineering Notes/CS & Algorithms
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() 메서드를 오버라이드하면, 객체를 출력할 때 클래스 이름과 메모리 주소 대신, 사용자가 정의한 형식으로 객체의 정보를 출력한다.



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

'Engineering Notes > CS & Algorithms' 카테고리의 다른 글

[Java] BOJ 11866: 요세푸스 문제, 큐  (1) 2025.02.05
[Java] BOJ 4134: 에라토스테네스의 체  (1) 2025.02.04
[Java] BOJ 11650: 람다 표현식, 정렬 조건 부여하기  (3) 2025.01.16
[Java] BOJ 2609: 유클리드 호제법, 기약분수 만들기  (6) 2025.01.15
[Java] BOJ 15829: BigInteger, BigInteger.ZERO  (0) 2025.01.13
'Engineering Notes/CS & Algorithms' 카테고리의 다른 글
  • [Java] BOJ 11866: 요세푸스 문제, 큐
  • [Java] BOJ 4134: 에라토스테네스의 체
  • [Java] BOJ 11650: 람다 표현식, 정렬 조건 부여하기
  • [Java] BOJ 2609: 유클리드 호제법, 기약분수 만들기
UTACT
UTACT
시작은 가볍게 이유는 무겁게
  • UTACT
    Software Engineer
    UTACT
    • GitHub
  • 전체
    오늘
    어제
  • 공지사항

    • README
  • 최근 글

    • 분류 전체보기 (126)
      • Project Logs (2)
        • DashHub (2)
        • Re:Act (0)
        • Samsung NW (0)
      • Engineering Notes (76)
        • Java & Spring (44)
        • Database & Persistence (1)
        • DevOps & Infra (4)
        • CS & Algorithms (26)
        • Security (1)
      • Reflections (5)
        • Retrospectives (1)
        • Feedback Received (3)
        • Challenges (1)
      • Tips (24)
      • Archive (19)
  • 태그

    DS
    VS Code
    팀 정렬
    인접 노드 리스트
    OOP
    버프 슈트
    타입 소거
    Python
    heap
    iamdefinitelyabackenddeveloper
    hate-cnu
    Array
    cherry-pick
    .prettierrc
    데이터 영속성
    JPA
    BFS
    IntelliJ
    토스페이먼츠
    @CreatedDate
    REST
    도커
    Reallocation
    듀얼 피봇 퀵 정렬
    BOJ
    Data Type
    where-was-i
    vite
    CS
    heapify
  • hELLO· Designed By정상우.v4.10.6
UTACT
[Java] BOJ 10814: 나이순 정렬, 2차원 배열
상단으로

티스토리툴바