-
[백준 10814번] 나이순 정렬 (Java 풀이)Algorithm/정렬(Sort) 2020. 2. 8. 16:21
백준알고리즘 10814번 : 나이순 정렬
받아온 회원들을 정렬하는 문제이다.
정렬의 조건은,
첫째. 나이를 오름차순으로 정렬할 것
둘째. 나이가 같다면 먼저 가입한 순(먼저 받은 순) 대로 정렬할것.
나이는 주어지기 때문에 받아온 뒤 정렬하면 되지만, 가입순서는 주어지지 않기에
Age라는 객체에 받아온 순서를 담을 수 있도록 정수 field를 하나 추가했고
자체적으로 순서를 넣어주었다.
풀이 과정
1. 나이(int), 이름(String), 등록 순서(int)를 field로 갖는 객체를 생성한다.
2. 객체가 Comparable을 implements 하도록 하고 compareTo method를 override(재정의)하여
나이순, 등록순으로 정렬하도록 한다.
3. 1번에서 생성한 객체를 List에 담고, List를 정배열로 Sort한다.소스 ▽
더보기import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Scanner; public class Main {// no10814 나이순 정렬 public static void main(String[] args) { Scanner sc = new Scanner(System.in); int people = Integer.parseInt(sc.nextLine()); List arr = new ArrayList<Age>(); for (int i = 0; i < people; i++) { Age age = new Age(sc.nextInt(), sc.nextLine(), i); arr.add(age); } arr.sort(Comparator.naturalOrder()); for (Object a : arr) { System.out.println(a.toString()); } } } class Age implements Comparable<Age> { int age; String name; int count; public Age(int age, String name, int count) { super(); this.age = age; this.name = name; this.count = count; } @Override public int compareTo(Age o) { // TODO Auto-generated method stub if (this.age > o.age) { // 현재 대상이 비교 대상의 나이보다 적으면 앞으로 와야함. return 1; } else if (this.age == o.age && this.count > o.count) { // 나이가 같아도, 현재 대상의 가입순서가 빠르면 앞으로 온다. return 1; } else return -1; } @Override public String toString() { return age + "" + name; } }
'Algorithm > 정렬(Sort)' 카테고리의 다른 글
[백준 10867번] 중복 빼고 정렬하기(Java 풀이) (0) 2020.02.22 [백준 2822번] 점수 계산(Java 풀이) (0) 2020.02.21 [백준 1302번] 베스트셀러(Java 풀이) (0) 2020.02.15 [백준 10825번] 국영수 (Java 풀이) (0) 2020.02.14 [백준 10610번] 30 (Java 풀이) (0) 2020.02.09