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();
}
}
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준_JAVA_알고리즘] 10815 숫자 카드 (0) | 2024.02.10 |
---|---|
[백준_JAVA_알고리즘] 1010 다리 놓기 (0) | 2024.02.09 |
[백준_JAVA_알고리즘] 1181 단어 정렬 (0) | 2024.02.08 |
[백준_JAVA_알고리즘] 11651 좌표 정렬하기 2 (0) | 2024.02.07 |
[백준_JAVA_알고리즘] 11650 좌표 정렬하기 (0) | 2024.02.07 |