[백준]10814_나이순 정렬

김피자·2023년 2월 11일
0

백준

목록 보기
23/42

문제

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


입력

첫째 줄에 온라인 저지 회원의 수 N이 주어진다. (1 ≤ N ≤ 100,000)

둘째 줄부터 N개의 줄에는 각 회원의 나이와 이름이 공백으로 구분되어 주어진다. 나이는 1보다 크거나 같으며, 200보다 작거나 같은 정수이고, 이름은 알파벳 대소문자로 이루어져 있고, 길이가 100보다 작거나 같은 문자열이다. 입력은 가입한 순서로 주어진다.


출력

첫째 줄부터 총 N개의 줄에 걸쳐 온라인 저지 회원을 나이 순, 나이가 같으면 가입한 순으로 한 줄에 한 명씩 나이와 이름을 공백으로 구분해 출력한다.


풀이

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {	
		Scanner sc = new Scanner(System.in);
		int T = sc.nextInt();
		String[][]arr = new String[T][2];
		for(int i = 0; i<T; i++) {
			arr[i][0] = sc.next();
			arr[i][1] = sc.next();
		}
		Arrays.sort(arr, new Comparator<String[]>() {
   	 		@Override
   	 		public int compare(String[] s1, String[] s2) {
   	 		if(s1[0] == s2[0]) {
   	 			return 1;
   	 		}else {
   	 			return Integer.parseInt(s1[0]) - Integer.parseInt(s2[0]);
   	 		}
   	 	}
   	 	});
   	 	for(int i = 0; i < T; i++) {
			System.out.println(arr[i][0] +" "+ arr[i][1]);
   	 	}
	}
}

과정 설명

원래의 정렬이라면

Arrays.sort(arr)

sort를 사용해 간편하게 정렬을 할텐데 이 sort는 기본적으로 정수 배열만 정렬을 해주기 때문에 위 문제와 같은 경우 다른 방법을 사용해야 함

Arrays.sort로 인자 2개의 값을 보내자!

Arrays.sort(arr, new Comparator<T>)

지정된 Comparator이 가리키는 순어에 따라 지정된 객체의 배열을 정렬한다!

Comparator<'제네릭'>안에 2차원 배열이면 String []를 1차원 배열이면 String을 넣어주고 compare메소드를 재정의해야함

Arrays.sort(arr, new Comparator<String[]>() {
   	 		@Override
   	 		public int compare(String[] s1, String[] s2) {
   	 		if(s1[0] == s2[0]) {
   	 			return 1;
   	 		}else {
   	 			return Integer.parseInt(s1[0]) - Integer.parseInt(s2[0]);
   	 		}
   	 	}
   	 	});

위 코드에서 compare를 보면 s1은 arr[0][0]을 s2는 arr[1][0]을 가리키는 것
같을 때 1을 반환하는 이유는 나이가 같다면 먼저 들어온 사람이 우선시 되어야 하니깐~

profile
제로부터시작하는코딩생활

0개의 댓글