코딩테스트

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

hye-ne 2024. 9. 10. 17:10

문제 탐색하기

N : 회원의 수

입력 : 온라인 저지에 가입한 사람들의 나이와 이름 (가입순)

출력 : 나이 오름차순 정렬,  나이가 같으면 가입순으로 정렬

 

가능한 시간복잡도

N이 최대 100,000으로 최악의 경우 O(n^2) 은 불가능, O(n) 시간 안에 해결해야함이차원배열 정렬을 위해 내장 sort() 함수와 Lambda 함수를 사용함


코드 설계하기

1. 회원 수 N 를 입력받는다 .

2. 회원 수 만큼 for문을 돌리며 배열에 나이와 이름을 저장한다.

3. 나이를 기준으로 오름차순 정렬을 한다.

4. 나이가 같으면, 가입순으로 정렬을 한다.

5. 정렬된 배열을 출력한다.


풀이 코드

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

public class Main {
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int num = Integer.parseInt(br.readLine()); // 회원수
		String[][] arr = new String[num][2]; // 회원 이차원배열
		
		// 1. 회원 이차원 배열에 담기
		for(int i=0;i<num;i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			while(st.hasMoreTokens()) {
				arr[i][0]= st.nextToken(); // age
				arr[i][1] = st.nextToken(); // name
			}
		}
		
		// 2. arr[0](나이)을 기준으로 정렬 
		Arrays.sort(arr, (o1,o2) -> {
			return Integer.parseInt(o1[0]) - Integer.parseInt(o2[0]);
		});
		
		// 3. 출력
		for(int i=0;i<num;i++) {
			System.out.println(arr[i][0]+" "+arr[i][1]);
		}
	}
}