본문 바로가기

Algorithm/Baekjoon

[백준_JAVA_알고리즘] 10814 나이순 정렬

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {

	public static void main(String[] args) throws IOException {
		BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int N = Integer.parseInt(bufferedReader.readLine());
		String[][] line = new String[N][2];
		String[] tmp = null;
		
		for(int i = 0; i < N; i++)
			line[i] = bufferedReader.readLine().split(" ");
		
		for(int i = 0; i < N; i++) {
			for(int j = 0; j < N-1; j++) {
				int num1 = Integer.parseInt(line[j][0]);
				int num2 = Integer.parseInt(line[j+1][0]);
				if(num1 > num2) {
					tmp = line[j];
					line[j] = line[j+1];
					line[j+1] = tmp;
				}
			}
		}
		
		for(int i = 0; i < N; i++)
			bufferedWriter.write(line[i][0]+" "+line[i][1]+"\n");
		
		bufferedWriter.flush();
		bufferedReader.close();
		bufferedWriter.close();
	}
}

버블 정렬로 코드를 작성했더니 시간 초과가 발생했다.

다른 정렬 방법이 있는지 찾아보니 퀵 정렬, Comparator을 사용하면 됐다.

 


Comparator

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Comparator;

public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(System.out));
        
        int N = Integer.parseInt(bufferedReader.readLine());
        String[][] members = new String[N][2]; // 나이와 이름을 저장할 2차원 배열
        
        for (int i = 0; i < N; i++) {
            String[] input = bufferedReader.readLine().split(" ");
            members[i][0] = input[0]; // 나이
            members[i][1] = input[1]; // 이름
        }
        
        // 회원을 나이 순, 나이가 같으면 가입 순으로 정렬
        Arrays.sort(members, new Comparator<String[]>() {
            @Override
            public int compare(String[] o1, String[] o2) {
                // 나이가 같으면 가입한 순서로 비교
                if (o1[0] == o2[0]) {
                    return Integer.compare(Integer.parseInt(o1[1]), Integer.parseInt(o2[1]));
                }
                // 나이가 다르면 나이순으로 비교
                return Integer.compare(Integer.parseInt(o1[0]), Integer.parseInt(o2[0]));
            }
        });
        
        for (int i = 0; i < N; i++) {
            bufferedWriter.write(members[i][0] + " " + members[i][1] + "\n");
        }
        
        bufferedWriter.flush();
        bufferedReader.close();
        bufferedWriter.close();
    }
}