Gidhub BE Developer

[BOJ] 10814. 나이순 정렬

2021-01-31
goodGid

Problem

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 
이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을 작성하시오.

[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 : 무조건 변경되어야 한다.

Recommend

Index