문제
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);
}
}
}
'🧑💻코딩 테스트 > 백준 (BOJ)' 카테고리의 다른 글
[코딩테스트/백준 알고리즘] 2164번 : 카드2 (Java, 자바 풀이) (0) | 2022.08.03 |
---|---|
[코딩테스트/ 백준 알고리즘] 10866번 : 덱 (Java, 자바 풀이) (0) | 2022.08.03 |
[코딩 테스트/백준 알고리즘] 1295번 : 팰린드롬수(Java 풀이) (0) | 2022.08.01 |
[코딩 테스트/백준 알고리즘] 11650번 : 좌표 정렬하기 (Java 풀이) (0) | 2022.08.01 |
[코딩 테스트/백준 알고리즘] 1181번 : 단어 정렬 (Java 풀이) (0) | 2022.08.01 |
댓글