알고리즘/백준
[백준] 10814번 : 나이순 정렬
Junuuu
2022. 8. 25. 00:01
반응형
https://www.acmicpc.net/problem/10814
10814번: 나이순 정렬
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을
www.acmicpc.net
문제 해석
정렬을 잘할 수 있는지 묻는 문제입니다.
나이순으로 그리고 나이가 같다면 가입한 순으로 정렬합니다.
문제 풀이 전 설계
람다와 스트림을 통해 해결해보려고 합니다.
Member 클래스를 두고 나이, 가입한 순으로 Comparator를 구현합니다.
출력은 stream의 forEach로 값을 쌓아두고 출력합니다.
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
public class Main {
static class Member {
int age;
int order;
String name;
public Member(int age, int order, String name) {
this.age = age;
this.order = order;
this.name = name;
}
}
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
List<Member> members = new ArrayList<>();
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int age = Integer.parseInt(st.nextToken());
String name = st.nextToken();
members.add(new Member(age, i, name));
}
members.sort((m1, m2) -> m1.age == m2.age ? m1.order - m2.order : m1.age - m2.age);
StringBuilder sb = new StringBuilder();
members.stream()
.forEach(m1 -> sb.append(m1.age + " " + m1.name + "\n"));
System.out.println(sb.toString());
}
}