[10814.java] 나이순 정렬

seungyeon·2023년 9월 7일

이차원 배열 정렬

-> Comparator를 Override하여 정렬 기준 제시
-> 비교 기준이 같으면 입력의 순서대로 저장
-> 오름차순으로 정렬

해당 문제는 이차원 "문자열" 배열이므로 이 부분만 작성됨.

  • 이차원 문자열 배열 정렬
    Lamda 이용해 Arrays.sort 메소드를 Override하여 작성

첫 번째 인덱스 값에 따라 정렬되고,
만약 첫 번째 인덱스 값이 동일한 경우에는 두 번째 있는 값을 비교하여 정렬시킨다.

        Arrays.sort(배열, new Comparator<String[]>() {
            @Override
            public int compare(String[] o1, String[] o2) {
                if(o1[0].toString().contentEquals(o2[0].toString()))
                    return o1[1].toString().compareTo(o2[1].toString());
                else
                    return o1[0].toString().compareTo(o2[0].toString());
            }
        })

해설

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

public class Main {
    public static void main(String args[]) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine()); //회원의 수

        String arr[][] = new String[N][2]; //나이, 이름

        for(int i = 0; i < N; i++){
            StringTokenizer st = new StringTokenizer(br.readLine(), " ");
            arr[i][0] = st.nextToken(); //나이
            arr[i][1] = st.nextToken(); //이름
        }

        //나이가 같으면 먼저 가입한 순으로 정렬
        Arrays.sort(arr, new Comparator<String[]>() {
            @Override
            public int compare(String[] o1, String[] o2) {
                return Integer.parseInt(o1[0]) - Integer.parseInt(o2[0]); //오름차순
            }
        });

        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < N; i++){
            sb.append(arr[i][0]).append(" ").append(arr[i][1]).append("\n");
        }
        System.out.println(sb);

    }
}

람다식으로 작성하면 위와 동일 문법 (Int인 경우)
Arrays.sort(arr, (o1, o2) -> o1[0] - o2[0]);

0개의 댓글