문제 번호 10814번 : 나이순 정렬 - JAVA [자바]
728x90
https://www.acmicpc.net/problem/10814
문제 설명
회원의 나이와 이름을 받고 나이순으로 정렬하되 나이가 같으면 가입한 순으로 정렬을 하는 문제입니다.
보고 오기를 추천하는 게시물
https://kkungchan.tistory.com/300
문제 풀이
문제를 보고 처음에 든 생각은 회원을 객체로 만들어야 겠다는 생각입니다.
언제부터인가 객체지향 언어를 하고 부터는 저런 유형을 객체로 만들지 않으면 몸이 간지러운 병에 걸렸습니다.
그래서 회원 객체를 만들고 그 객체의 compareTo를 나이순으로 재정의 해주어 Arrays.sort에 넘겨 그 기준으로 정렬하도록 지정하는 방식으로 구현하도록 하겠습니다.
compareTo와 Comparator에 대해 궁금하신 분들은 위에 참고 게시글을 숙지하고 와주시면 감사하겠습니다.
import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
//회원을 여러명 입력받을 배열
Member[] arrMember = new Member[n];
//회원을 입력받음
for(int i=0; i<n; i++){
int age = sc.nextInt();
String name = sc.next();
arrMember[i] = new Member(age,name);
}
//나이순으로 정렬
Arrays.sort(arrMember,new Comparator<Member>(){
@Override
public int compare(Member m1, Member m2) {
return m1.compareTo(m2);
}
});
//한줄에 출력
for(int i=0; i<n; i++){
System.out.println(arrMember[i].age + " " + arrMember[i].name);
}
}
}
class Member implements Comparable<Member> {
int age;
String name;
public Member(int age, String name){
this.age = age;
this.name = name;
}
//나이순으로 정렬을 위한 compareTo 구현
@Override
public int compareTo(Member o) {
return this.age - o.age;
}
}
가입한 회원순은 sort는 안전정렬(값이 같을 때 원소의 위치가 변경되지 않음)이 되기 때문에 굳이 구현해 주지 않아도 정렬이 됩니다.
'알고리즘 > 백준 문제 및 정답' 카테고리의 다른 글
문제 번호 2447번 : 별 찍기 - JAVA [자바] (0) | 2023.03.29 |
---|---|
문제 번호 18870번 : 좌표 압축 - JAVA [자바] (0) | 2023.03.09 |
문제 번호 1181번 : 단어 정렬 - JAVA [자바] (0) | 2023.03.07 |
문제 번호 11651번 : 좌표 정렬하기 2 - JAVA [자바] (0) | 2023.03.07 |
문제 번호 11650번 : 좌표 정렬하기 - JAVA [자바] (0) | 2023.03.07 |