Algorithms 🚀/Baekjoon

[백준/10814번] 나이순 정렬 - JAVA[자바]

728x90

www.acmicpc.net/problem/10814

 

10814번: 나이순 정렬

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

www.acmicpc.net

이 문제의 조건은 2가지입니다.

 

1. 나이순으로 오름차순 정렬

2. 나이가 같으면 가입 순으로 오름차순 정렬 (가입일은 입력 순)

 

저는 각 회원마다 가입 순서를 지정해주고 그것들을 비교해서 입력 순 정렬을 구현하였습니다.

 

(문제를 풀고 생각해보니 나이순으로 정렬을 구현하면 자연스럽게 입력 순으로 정렬이 된다는 걸 깨달았습니다...)

 

아래는 정답 코드입니다! (보기 전에 다시 한번 생각해보세요!)

더보기
package baekjoon.level12;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;

public class BOJ_10814 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        int N = Integer.parseInt(br.readLine());
        String[][] boj = new String[N][3];

        for(int i=0; i<N; i++){
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            boj[i][0] = st.nextToken();
            boj[i][1] = st.nextToken();
            boj[i][2] = String.valueOf(i); // 가입순서
        }

        Arrays.sort(boj, new Comparator<String[]>() {
            @Override
            public int compare(String[] o1, String[] o2) {
                if(o1[0].equals(o2[0])) {
                    return Integer.parseInt(o1[2]) - Integer.parseInt(o2[2]);
                }else {
                    return Integer.parseInt(o1[0]) - Integer.parseInt(o2[0]);
                }
            }
        });

        for(String[] str : boj) {
            System.out.println(str[0] + " " + str[1]);
        }
    }
}

 

 

 

 

 

 

 

728x90