알고리즘 - 백준_10814번_나이순 정렬하기

jodbsgh·2023년 4월 15일
0

위 문제는 11650번 좌표 정렬하기 문제를 풀이한 경험이 있다면 쉽게 풀 수 있는 문제다. 좌표정렬하기 문제에서 "x"가 동일할 때 "y"값을 비교했던 것과 같이, 이번에는 나이가 동일한 경우 입력한 순번, 즉 입력된 데이터를 배열에 담는 순번을 변수에 담아서 비교하면 된다.

✅코드

import java.util.*;
import java.io.*;

// 회원 정보를 저장하는 클래스
class Member {
    int age;
    String name;
    int joinDate;

    public Member(int age, String name, int joinDate) {
        this.age = age;
        this.name = name;
        this.joinDate = joinDate;
    }

    @Override
    public String toString() {
        return age + " " + name;
    }
}

public class Main {
    public static void main(String[] args) throws Exception {
        // BufferedReader와 BufferedWriter를 생성하여 입출력을 처리합니다.
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        // 회원 수를 입력받습니다.
        int n = Integer.parseInt(br.readLine());

        // 회원 정보를 저장할 Member 배열을 생성합니다.
        Member[] members = new Member[n];

        // 회원 정보를 입력받아 Member 객체를 생성하여 배열에 저장합니다.
        for (int i = 0; i < n; i++) {
            String[] input = br.readLine().split(" ");
            int age = Integer.parseInt(input[0]);
            String name = input[1];
            members[i] = new Member(age, name, i);
        }

        // Arrays.sort 메소드를 이용하여 회원 정보를 나이순으로 정렬합니다.
        // 나이가 같은 경우에는 가입일순으로 정렬합니다.
        Arrays.sort(members, new Comparator<Member>() {
            @Override
            public int compare(Member o1, Member o2) {
                if (o1.age == o2.age) {
                    return o1.joinDate - o2.joinDate;
                } else {
                    return o1.age - o2.age;
                }
            }
        });

        // 회원 정보를 출력합니다.
        for (Member member : members) {
            bw.write(member + "\n");
        }

        // BufferedWriter를 닫아줍니다.
        bw.flush();
        bw.close();
        br.close();
    }
}
profile
어제 보다는 내일을, 내일 보다는 오늘을 🚀

0개의 댓글