❓ 문제
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오.
📥 입력
첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000)
둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수이고, 이름은 알파벳 대소문자로 이루어져 있고, 길이가 100보다 작거나 같은 문자열이다. 입력은 가입한 순서로 주어진다.
📤 출력
첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순, 나이가 같으면 가입한 순으로 한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다.
📥 예제 입력
3
21 Junkyu
21 Dohyun
20 Sunyoung
📤 예제 출력
20 Sunyoung
21 Junkyu
21 Dohyun
👩🏻💻 내 코드
package baekjoon.코테챌린지;
import java.util.Arrays;
import java.util.Scanner;
public class 나이순정렬 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int N = in.nextInt();
String[][] members = new String[N][2];
for(int i = 0; i < N; i++) {
members[i][0] = in.next();
members[i][1] = in.next();
}
Arrays.sort(members, (a, b) -> {
int ageSorting = Integer.parseInt(a[0]) - Integer.parseInt(b[0]);
return ageSorting;
});
for(int i = 0; i < N; i++) {
System.out.println(members[i][0] + " " + members[i][1]);
}
}
}
💡 공부 내용 < 람다 함수 >
- 람다 함수 형식 : (매개변수) -> { 함수의 내용 }
- Integer.parseInt(a[0]) - Integer.parseInt(b[0])두 정수 값을 빼는 연산
- 만약 a[0]이 21이고 b[0]이 20이면, 이 연산은 21 - 20 = 1이 됩니다. 양수가 반환되면 a가 b보다 뒤로 가도록 정렬된다.
- 반대로 a[0]이 20이고 b[0]이 21이면, 20 - 21 = -1이 되며 음수가 반환되고, 이 경우 a가 b보다 앞으로 가도록 정렬된다.
- 만약 두 값이 같다면(예: a[0] == b[0]), 0이 반환되며 순서가 유지된다. 🌟🌟 자바의 Arrays.sort()는 stable sort이므로, 나이가 같을 때는 원래의 입력 순서대로 유지된다.
반응형
'백준 문제 풀이' 카테고리의 다른 글
<코테 챌린지> 커트라인 (백준 25305번) (1) | 2024.10.11 |
---|---|
<코테 챌린지> 생일 (백준 5635번) (0) | 2024.10.10 |
<코테 챌린지> 단어 정렬 (백준 1181번) (1) | 2024.10.09 |
(#10952 Java) A+B - 5 (0) | 2023.07.31 |
(#11022 Java) A+B -8 (0) | 2023.07.29 |