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
'프로그래밍 > 풀었어, 백준' 카테고리의 다른 글
[Java] 백준 11650번: 람다 표현식 (1) | 2025.01.16 |
---|---|
[Java] 백준 2609번: 유클리드 호제법 (1) | 2025.01.15 |
[Java] 백준 2775번: 2차원 배열 (0) | 2025.01.14 |
[Java] 백준 15829번: BigInteger (0) | 2025.01.13 |
[Java] 백준 2750번: 오름차순 정렬하기 (0) | 2025.01.09 |