[Java] 백준 10814번: 나이순 정렬

SOL·2023년 9월 3일
0

알고리즘

목록 보기
16/31

카테고리: 정렬

문제

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


풀이 방식

회원들을 담을 클래스를 만든 후 클래스 배열을 정렬합니다. 클래스를 직접 기준으로 정렬하는 방법은 두가지 입니다.

  1. Member 클래스에 Comparable Interface 구현하여 compareTo 메서드 오버라이딩 하기
  2. Arrays.sort에 Comparator 정의하여 클래스 배열 정렬하기


최종 코드

1번 풀이 방식의 코드입니다.

import java.io.*;
import java.sql.SQLOutput;
import java.util.*;


class Main {

    static public class Member implements Comparable<Member>{
        String name;
        int age;
        int joinNum;

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

        @Override
        public int compareTo(Member o) {
            if(age == o.age){
                return joinNum - o.joinNum;
            }
            return age - o.age;
        }
    }

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = Integer.parseInt(br.readLine());

        StringTokenizer st;

        List<Member> list = new ArrayList<>();
        for(int i=0; i < n; i++){
            st = new StringTokenizer(br.readLine());
            int age = Integer.parseInt(st.nextToken());
            String name = st.nextToken();
            list.add(new Member(name, age, i));
        }

        //정렬
        Collections.sort(list);

        for(Member member : list){
            bw.write(member.age+ " "+ member.name+"\n");
        }

        bw.flush();
        bw.close();

    }
}

2번 풀이 방식의 코드입니다.

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

class Main {

    static public class Member{
        String name;
        int age;
        int joinNum;

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

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        int n = Integer.parseInt(br.readLine());

        StringTokenizer st;

        Member[] members = new Member[n];
        for(int i=0; i < n; i++){
            st = new StringTokenizer(br.readLine());
            int age = Integer.parseInt(st.nextToken());
            String name = st.nextToken();
            members[i] = new Member(name, age, i);
        }

        //정렬
        Arrays.sort(members, (o1, o2)-> {
            if(o1.age == o2.age){
                return o1.joinNum - o2.joinNum;
            }
            return o1.age - o2.age;
        });


        for(Member member : members){
            bw.write(member.age+ " "+ member.name+"\n");
        }

        bw.flush();
        bw.close();

    }
}
profile
개발 개념 정리

0개의 댓글

관련 채용 정보