나이순 정렬 : https://www.acmicpc.net/problem/10814
숏코드 : https://www.acmicpc.net/source/15915926
방법 1. String 배열에 저장 후, Age만 비교하여 정렬
age가 같을 경우 들어온 순서가 유지됨.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
//https://www.acmicpc.net/source/15915926
public class Main {
static int N;
static boolean DBG = false;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
String[][] arr = new String[N][2];
StringTokenizer st;
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
arr[i][0] = st.nextToken();
arr[i][1] = st.nextToken();
}
Arrays.sort(arr, (s1, s2) -> {
return Integer.parseInt(s1[0]) - Integer.parseInt(s2[0]);
});
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i++) {
sb.append(String.format("%s %s\n", arr[i][0], arr[i][1]));
}
System.out.println(sb);
}
}
방법 2. 클래스를 만들어서 정렬, 순서를 기억하기 위해 id를 추가함
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int N;
static boolean DBG = false;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
Person[] arr = new Person[N];
StringTokenizer st;
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
arr[i] = new Person(Integer.parseInt(st.nextToken()), i, st.nextToken());
}
Arrays.sort(arr, (p1, p2) -> {
if (p1.age == p2.age) {
return p1.id - p2.id;
} else {
return p1.age - p2.age;
}
});
StringBuilder sb = new StringBuilder();
for (Person p : arr)
sb.append(String.format("%d %s\n", p.age, p.name));
System.out.println(sb);
}
}
class Person {
int age, id;
String name;
Person(int age, int id, String name) {
this.age = age;
this.id = id;
this.name = name;
}
}
방법 3. ArrayList의 배열을 만들고, index를 age로 설정, age가 같은 경우 이후 입력된 순서대로 add 되므로 그대로 출력한다. (List가 비었을 경우, arr.[i].size는 0이 되므로 null 체크를 할 필요가 없다.)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int N;
static boolean DBG = false;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
ArrayList[] arr = new ArrayList[201];
StringTokenizer st;
for (int i = 0; i < 201; i++)
arr[i] = new ArrayList<String>();
for (int i = 0; i < N; i++) {
st = new StringTokenizer(br.readLine());
arr[Integer.parseInt(st.nextToken())].add(st.nextToken());
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 201; i++) {
for (int j = 0; j < arr[i].size(); j++) {
String name = (String) arr[i].get(j);
sb.append(String.format("%d %s\n", i, name));
}
}
System.out.println(sb);
}
}