본문 바로가기
🧑‍💻코딩 테스트/백준 (BOJ)

[코딩테스트/백준 알고리즘] 10814번 : 나이순 정렬 (Java, 자바 풀이)

by 코코의 주인 2022. 8. 3.

문제

https://www.acmicpc.net/problem/10814

 

10814번: 나이순 정렬

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

www.acmicpc.net


문제 설명


문제 풀이

 

Comparable 구현

class Person implements Comparable<Person>{
    /*생략*/
    public int compareTo(Person p) {
        if(this.age == p.age) {	//나이가 같으면
            return this.index - p.index;	//가입한 순 비교
        }
        else {	//나이가 다르면
            return this.age - p.age;	//나이 비교
        }
    }
}

 

참고 : 

2022.08.01 - [✏️Java 공부/기타 등등] - [Java 공부/기타] 객체 정렬하기 (Comparable & Comparator)

 

[Java 공부/기타] 객체 정렬하기 (Comparable & Comparator)

 백준 문제를 풀다 보면 정렬이 필요한 문제가 종종 나온다. 대부분의 경우 Arrays.sort()나 Collections.sort()를 호출하여 해결할 수 있지만 정렬에 추가적인 조건이 붙었거나, 사용자가 정의한 객체를

cocoiscat.tistory.com


코드

import java.util.*;

class Person implements Comparable<Person>{
    public int age;	//나이
    public String name;	//이름
    public int index;	//가입한 순서

    Person(int a, String n, int i) {
        this.age = a;
        this.name = n;
        this.index = i;
    }

    public int compareTo(Person p) {
        if(this.age == p.age) {	//나이가 같으면
            return this.index - p.index;	//가입한 순 비교
        }
        else {	//나이가 다르면
            return this.age - p.age;	//나이 비교
        }
    }
}

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        List<Person> people = new ArrayList<>();
        for(int i = 0; i < n; i++) {
            people.add(new Person(sc.nextInt(), sc.next(), i));
        }
        Collections.sort(people);
        for(Person p : people) {
            System.out.println(p.age + " " + p.name);
        }
    }
}

댓글