[Baekjoon] 10814번 : 나이순 정렬
1. 문제
https://www.acmicpc.net/problem/10814
- 정렬 문제
// 문제
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다.
이때, 회원들을 나이가 증가하는 순으로,
나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로
정렬하는 프로그램을 작성하시오.
// 입력
첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000)
둘째 줄부터 N개의 줄에는
각 회원의 나이와 이름이 공백으로 구분되어 주어진다.
나이는 1보다 크거나 같으며,
200보다 작거나 같은 정수이고,
이름은 알파벳 대소문자로 이루어져 있고,
길이가 100보다 작거나 같은 문자열이다.
입력은 가입한 순서로 주어진다.
// 출력
첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순,
나이가 같으면 가입한 순으로
한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다.
// 예제 입력 1
3
21 Junkyu
21 Dohyun
20 Sunyoung
// 예제 출력 1
20 Sunyoung
21 Junkyu
21 Dohyun
2. 핵심 아이디어
- (나이, 이름)의 정보를 입력 받은 뒤에 나이를 기준으로 정렬
- 파이썬의 기본 정렬 라이브러리를 이용
- 나이가 동일한 경우, 먼저 입력된 이름 순서를 따르도록 key 속성을 설정
3. Python 문제풀이
import sys
n = int(sys.stdin.readline())
info = list()
for _ in range(n) :
input_data = sys.stdin.readline().split()
info.append((int(input_data[0]), input_data[1]))
info = sorted(info, key = lambda x: x[0])
for i in info :
print(i[0], i[1])
4. Java 문제풀이
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
Person[] p = new Person[N];
for (int i=0; i<N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int age = Integer.parseInt(st.nextToken());
String name = st.nextToken();
p[i] = new Person(age, name);
}
Arrays.sort(p, new Comparator<Person>() {
@Override
public int compare(Person s1, Person s2) {
return s1.age - s2.age;
}
});
StringBuilder sb = new StringBuilder();
for (int i=0; i<N; i++) {
sb.append(p[i]);
}
System.out.println(sb);
}
public static class Person {
int age;
String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
public String toString() {
return age + " " + name + "\n";
}
}
}
댓글남기기