import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
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());
int[][] arr = new int[N][2];
int tmp=0;
for(int i = 0; i < N; i++) {
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
arr[i][0] = Integer.parseInt(stringTokenizer.nextToken());
arr[i][1] = Integer.parseInt(stringTokenizer.nextToken());
}
for(int i = 0; i < N; i++) {
for(int j = 0; j < N-i-1; j++) {
if(arr[j][0] > arr[j+1][0]) {
tmp = arr[j][0];
arr[j][0] = arr[j+1][0];
arr[j+1][0] = tmp;
tmp = arr[j][1];
arr[j][1] = arr[j+1][1];
arr[j+1][1] = tmp;
}
if(arr[j][0] == arr[j+1][0]) {
if(arr[j][1] > arr[j+1][1]) {
tmp = arr[j][0];
arr[j][0] = arr[j+1][0];
arr[j+1][0] = tmp;
tmp = arr[j][1];
arr[j][1] = arr[j+1][1];
arr[j+1][1] = tmp;
}
}
}
}
for(int i = 0; i < N; i++)
bufferedWriter.write(arr[i][0]+" "+arr[i][1]+"\n");
bufferedWriter.flush();
bufferedReader.close();
bufferedWriter.close();
}
}
위의 코드에서 시간 초과가 발생했다. 버블 정렬을 이용했기 때문이라고 생각한다..
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
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());
int[][] arr = new int[N][2];
int tmp1=0; int tmp2=0;
for(int i = 0; i < N; i++) {
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
arr[i][0] = Integer.parseInt(stringTokenizer.nextToken());
arr[i][1] = Integer.parseInt(stringTokenizer.nextToken());
}
for(int i = 0; i < N; i++) {
for(int j = 0; j < N-i-1; j++) {
if(arr[j][0] > arr[j+1][0]) {
tmp1 = arr[j][0];
arr[j][0] = arr[j+1][0];
arr[j+1][0] = tmp1;
tmp2 = arr[j][1];
arr[j][1] = arr[j+1][1];
arr[j+1][1] = tmp2;
}
else if(arr[j][0] == arr[j+1][0]) {
if(arr[j][1] > arr[j+1][1]) {
tmp1 = arr[j][0];
arr[j][0] = arr[j+1][0];
arr[j+1][0] = tmp1;
tmp2 = arr[j][1];
arr[j][1] = arr[j+1][1];
arr[j+1][1] = tmp2;
}
}
}
}
for(int i = 0; i < N; i++)
bufferedWriter.write(arr[i][0]+" "+arr[i][1]+"\n");
bufferedWriter.flush();
bufferedReader.close();
bufferedWriter.close();
}
}
계속해서 오류가 발생한다.. 구글링해보니 람다 함수 또는 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.StringTokenizer;
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());
int[][] arr = new int[N][2];
for(int i = 0; i < N; i++) {
StringTokenizer stringTokenizer = new StringTokenizer(bufferedReader.readLine());
arr[i][0] = Integer.parseInt(stringTokenizer.nextToken());
arr[i][1] = Integer.parseInt(stringTokenizer.nextToken());
}
// Arrays.sort()
Arrays.sort(arr, (a1, a2) -> {
if(a1[0] == a2[0]) // x 값이 같다면
return a1[1] - a2[1]; // 두 번째 인덱스 값에 대해 오름차순으로 정렬
else
return a1[0] - a2[0]; // 첫 번째 인덱스 값에 대해 오름차순으로 정렬
});
for(int i = 0; i < N; i++)
bufferedWriter.write(arr[i][0]+" "+arr[i][1]+"\n");
bufferedWriter.flush();
bufferedReader.close();
bufferedWriter.close();
}
}
람다 함수를 이용하여 구현을 해보았다.
람다 함수를 이용할 때 Comparator도 이용했다.
x값이 같을 경우, 다를 경우 리턴 값을 달리했다.
Java는 오름차순 정렬이 default이다..
'Algorithm > Baekjoon' 카테고리의 다른 글
[백준_JAVA_알고리즘] 1181 단어 정렬 (0) | 2024.02.08 |
---|---|
[백준_JAVA_알고리즘] 11651 좌표 정렬하기 2 (0) | 2024.02.07 |
[백준_JAVA_알고리즘] 1427 소트인사이드 (0) | 2024.02.07 |
[백준_JAVA_알고리즘] 2751 수 정렬하기 2 (0) | 2024.02.06 |
[백준_JAVA_알고리즘] 25305 커트라인 (0) | 2024.02.05 |