728x90
백준 10814번 나이순 정렬 JAVA
문제 설명
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오.
입력
첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000)
둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수이고, 이름은 알파벳 대소문자로 이루어져 있고, 길이가 100보다 작거나 같은 문자열이다. 입력은 가입한 순서로 주어진다.
출력
첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순, 나이가 같으면 가입한 순으로 한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다.
나의 문제 풀이 코드
import java.io.*;
import java.util.*;
public class bj10814 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
String[] members = new String[N];
for (int i = 0; i < N; i++) {
members[i] = br.readLine();
}
Arrays.sort(members, new Comparator<String>() {
public int compare(String s1, String s2) {
String[] split1 = s1.split(" ");
String[] split2 = s2.split(" ");
int age1 = Integer.parseInt(split1[0]);
int age2 = Integer.parseInt(split2[0]);
return Integer.compare(age1, age2);
}
});
for (String member : members) {
bw.write(member + "\n");
}
bw.flush();
}
}
문제 풀이 코멘트
이 문제에서 나이와 이름을 따로 저장한다기 보단, 하나의 문자열로 인식하여 문자열 배열 member에 저장하였습니다.
Arrays.sort() 메서드를 사용하여 members 배열을 정렬합니다. 정렬 조건은 나이에 따라 정렬합니다.
Arrays.sort() 메서드를 조금 더 자세하게 설명해보겠습니다.
- Arrays.sort() 메서드를 호출하여 members 배열을 정렬하는데, Comparator를 사용하여 비교 방법을 지정합니다. Comparator는 비교 함수를 정의하는 인터페이스로, compare 메서드를 구현해야 합니다.
- public int compare(String s1, String s2) { ... }: Comparator 인터페이스를 구현한 익명 클래스를 정의합니다. 이 클래스는 compare 메서드를 override하여 비교 로직을 정의합니다. 이 메서드는 두 개의 문자열 s1과 s2를 비교하여 정수 값을 반환해야 합니다.
- 그 다음, 입력된 문자열 s1과 s2를 공백을 기준으로 분리하여 문자열 배열로 저장합니다. 각 배열의 첫 번째 요소는 나이를 나타내고 두 번째 요소는 이름을 나타냅니다. 분리된 문자열 배열에서 첫 번째 요소, 즉 나이 정보를 정수로 파싱하여 age1과 age2 변수에 저장합니다.
- 마지막으로, 두 회원의 나이를 비교하여 정수 값을 반환하는데 Integer.compare() 메서드는 두 정수를 비교하고, 첫 번째 인수가 작으면 음수를, 같으면 0을, 첫 번째 인수가 크면 양수를 반환합니다. 따라서 이 코드는 나이를 오름차순으로 정렬하도록 설정합니다.
점점 문제가 어려워지는게 느껴지는데 하루라도 더 빨리 자료구조를 마스터해야겠습니다..
728x90
'공log > [P&B]' 카테고리의 다른 글
[P&B] #80 BAEKJOON 11866 (0) | 2023.09.22 |
---|---|
[P&B] #79 BAEKJOON 11650 (0) | 2023.09.22 |
[P&B] #77 BAEKJOON 1181 (0) | 2023.09.21 |
[P&B] #76 BAEKJOON 1920 (0) | 2023.09.21 |
[P&B] #75 BAEKJOON 2164 (0) | 2023.09.21 |