본문 바로가기
CodingTest/백준

백준 10814번 -나이순 정렬(JAVA)

by 마운틴케이 2020. 9. 10.

www.acmicpc.net/problem/10814

 

10814번: 나이순 정렬

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

www.acmicpc.net

 

N개 만큼 나이와 이름을 입력받고, (예: 20 Chulsoo)

나이 순으로 출력합니다. 나이가 같을 경우엔 가입순(입력받은 순)으로 출력합니다.

 

 

찾아보니 입력을 이차원 배열로 받아서 많이 하시는데

저는 String배열로 했습니다.

입력 방식에 따라 달라지는 부분이 있으니 두 방법 모두 소개해보겠습니다.


 

String 배열로 처리하는 방법

 

import java.util.*;

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

        // 10814
        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();
        sc.nextLine();
        String[] arr = new String[N];

        for(int i=0;i<N;i++){
            arr[i] = sc.nextLine();
        }

        Arrays.sort(arr, new Comparator<String>() {
            public int compare(String o1, String o2) {
                String[] a = o1.split(" ");
                String[] b = o2.split(" ");

                return Integer.compare(Integer.parseInt(a[0]),Integer.parseInt(b[0]));
            }
        });

        for(int i=0;i<N;i++){
            System.out.println(arr[i]);
        }

    }
}

 

풀이과정

1. 개수 N을 입력받고 N 크기의 String 배열을 생성.

   반복문으로 차례로 단어를 입력받습니다.

 

2. 정렬을 수행해줍니다.

   Arrays.sort에 Comparator를 구현,

   매개변수로 들어올 문자열이 "20 Chulsoo" 형식이므로

   split으로 잘라서 각각 String배열에 담습니다.

   

   Integer.compare을 사용. a와 b의 0번 인덱스, 즉 나이를 비교해 정렬합니다.

   나이가 같을 경우엔 입력받은 순서대로 정렬될 것입니다.

 

3. 출력해줍니다.

 

 

 


String 2차원 배열로 처리하는 방법

 

import java.util.*;

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

        // 10814
        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt();
        sc.nextLine();

        String[][] arr = new String[N][2];

        for(int i=0;i<N;i++){
            arr[i][0]=sc.next();
            arr[i][1]=sc.next();
        }

        Arrays.sort(arr, new Comparator<String[]>() {
            public int compare(String[] o1, String[] o2) {
                return Integer.compare(Integer.parseInt(o1[0]),Integer.parseInt(o2[0]));
            }
        });

        for(int i=0;i<N;i++){
            System.out.println(arr[i][0]+" "+arr[i][1]);
        }

    }
}

 

풀이과정

1.  개수 N을 받고, 2차원배열 arr를 생성.

    나이는 [i][0] , 이름은 [i][1]에 차례로 입력받습니다.

    예) arr[0][0] == "20" , arr[0][1] == "Chulsoo" , arr[1][0] == "21", arr[1][1] == "Younghi" ...

 

2. Arrays.sort에 Comparator를 구현합니다.

   Integer의 compare를 사용.

   매개변수의[0] 인덱스, 즉 나이만 비교해주면 나이순, 같다면 입력받은 순으로 정렬이 됩니다.

  return Integer.compare(Integer.parseInt(o1[0]),Integer.parseInt(o2[0]));

 

3. 반복문 안에서

    System.out.println(arr[i][0]+" "+arr[i][1]);

   로 출력해주면 "나이 이름"으로 쭉 출력됩니다.