백준

[백준/BOJ] 10814번 : 나이순 정렬 (JAVA / 자바)

코메인 2022. 3. 5. 20:12

안녕하세요~ 코딩하는 코알못 코메인입니다.

 

 

https://www.acmicpc.net/problem/10814

 

10814번: 나이순 정렬

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

www.acmicpc.net


- 문제 -

 

난이도 실버 5 문제이다.

자바에서 입력방식은 scanner와 bufferedreader가 있다.

자바를 초반에 접하면 처음에 배우는 입력은 scanner이다. scanner가 bufferedreader보다 편하지만 속도가 느리다.

bufferedreader는 무조건 문자열로 받아오기때문에 정수형이나 실수형 변수에 저장하기 위해서는 입력과 형변환을 해줘야한다.

더 자세한 내용은 아래 글 참고 하면 좋다.

https://comain.tistory.com/3

 

(JAVA / 자바) Scanner 와 Bufferedreader

안녕하세요~ 코딩하는 코알못 코메인입니다. 이번엔 백준 문제 풀면서 계속 언급될 scanner와 bufferedreader에 대한 간단한 정리를 해볼거다. 자바에서 입력은 scanner와 bufferedreader가 있다. 우선 각자

comain.tistory.com

 

풀이 방법

이차원 배열과 정렬을 사용해 풀 것이다.

이차원 배열에 입력값을 넣고, 나이를 오름차 순으로 정렬하되, 같은 나이일 경우 입력된 순서대로 정렬해야 한다.

그렇다면 입력된 그대로 나이만 정렬하면 된다.

배열을 정렬하는 함수인 Arrays.sort를 사용해 정렬을 할 것이고, comparator의 compare을 override해서 배열의 행과 열중 행에 맞춰서 정렬해 줄 것이다.

정렬 방법은

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

이렇다. 입력값을 보면 정수와 문자가 있다. 하지만 배열에 입력받으려면 둘중 문자열로 받아야 하기때문에 문자열로 받고 정수형으로 형변환을 해줘야한다.

o1과 o2의 차를 리턴하게되면, 차가 음수 또는 양수가 나오게 되면 두 값의 위치를 바꾸고, 같다면 바꾸지 않을 것이다.

위 코드를 적용하면 원하는 오름차순 정렬을 얻을 수 있다.

 

코드를 보자.


-풀이-

 

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 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];
		StringBuilder sb = new StringBuilder();
		
		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]);
			}
		});
		
        //sb에 정렬된 배열을 순서대로 저장해준다.
		for(int i = 0; i < N; i++) {
			sb.append(arr[i][0]).append(" ").append(arr[i][1]).append("\n");
		}
		System.out.println(sb);
	}

}

-결과-

 


아직 코딩 공부가 부족한 필자라 설명과 풀이 방법이 많이 미흡할 수 있다. 코딩 고수분들은 보시고 문제점이 있다면 댓글로 말해주시면 감사한 마음으로 참고 수정 하겠습니다.