Problem
- Problem URL : 나이순 정렬
온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다.
이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오.
[1] Answer Code (21. 01. 31)
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
String[][] arr = new String[N][2];
LinkedList<Person> personList = new LinkedList<>();
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
Person person = new Person(Integer.parseInt(st.nextToken()),
st.nextToken(),
i);
personList.add(person);
}
// [1]
Collections.sort(personList, (after, before) -> {
if (after.age > before.age) {
return 1;
} else if (after.age == before.age) {
if (after.order > before.order) {
return 0;
} else {
return -1;
}
} else {
return -1;
}
});
StringBuilder sb = new StringBuilder();
for (Person person : personList) {
sb.append(person.age + " " + person.name + '\n');
}
System.out.println(sb);
}
private static class Person {
public int age;
public String name;
public int order;
public Person(int age, String name, int order) {
this.age = age;
this.name = name;
this.order = order;
}
}
}
-
[1] : 다중 정렬을 요구하는 문제였다.
Java로 다중 정렬을 재정의해서 푸는 경험이 부족하다고 느껴서
관련된 문제를 풀어봤다.
-
여기서 핵심은 return 값인데
1 / 0 / -1 의 의미를 확실하게 알고 사용해야겠다.
사실 100% 맞는 개념인지는 모르겠으나
우선은 이렇게 정리를 해둔다.
1 : 무조건 변경되면 안된다.
0 : 변경되어도 괜찮다.
-1 : 무조건 변경되어야 한다.