본문 바로가기

백준

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

 


문제

  • 온라인 저지에 가입한 사람들의 나이와 이름이 주어질 때, 나이를 기준으로 오름차순으로 정렬하는 문제.
  • 단, 나이가 같다면 입력된 순서대로 출력해야 함.

 

아이디어

  • 나이와 이름을 String 배열에 담고 순서가 필요하므로 이를 ArrayList에 저장한다.
  • Java의 comparator를 오버라이딩 하여 정렬한다.
  • 나이가 다르다면 (숫자로 보이지만 문자열로 저장했기에 equals 메서드를 활용) 각 요소를 정수로 변환하고 빼서 구현, 같다면 순서를 바꾸지 않고 입력된 순서 그대로 둔다.

 

풀이

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

public class Main {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringBuilder sb = new StringBuilder();
        StringTokenizer st;

        int N = Integer.parseInt(br.readLine());
        
        // 입력된 순서 기억을 위해 문자열 배열 ArrayList 선언
        List<String[]> list = new ArrayList<>();
        
        for(int i=0; i<N; i++) {
            st = new StringTokenizer(br.readLine());
            
            // 각 요소로 크기 2의 String 배열 추가
            list.add(new String[]{st.nextToken(), st.nextToken()});
        }
        
        // comparator 오버라이딩
        list.sort((n1, n2)->{
            // 나이가 다르다면(문자열 비교 equals 사용)
            if(!n1[0].equals(n2[0])) {
                // 정수 타입으로 변환 후 뺀 값을 반환(순서 변경)
                return Integer.parseInt(n1[0])- Integer.parseInt(n2[0]);
            }
            // 같다면 그대로 저장
            else {
                return 0;
            }
        });
        for(String[] l: list){
            sb.append(l[0]).append(' ').append(l[1]).append('\n');
        }

        System.out.println(sb);
    }
}

 

 

채점 결과

10814번 채점 결과

 

문제 링크