Spring을 해보기로 결심하고, 자바 공부와 함께 알고리즘도 자바로 다시 풀기 시작했다. 그 중 첫 번째 문제로 백준 2750번 문제를 풀기로 하였다.
나는 처음엔 BufferedReader, StringBuilder와 Bubble Sort를 사용하여 문제를 풀었다.
버블 정렬은 배열의 두 번째 인덱스부터 이전 인덱스와 숫자를 비교해가면서 큰수가 배열 뒷부분으로 가도록 한다. 오름차순으로 정렬하다보면 배열의 뒷부분부터 정렬되는 것을 볼 수 있다. (참고)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class P2750_bubble {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
int [] arr = new int[n];
for(int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
// Bubble Sort
for(int i = n-1; i > 0; i--) {
for(int j = 0; j < i; j++) {
if(arr[j] > arr[j+1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for(int a : arr) {
sb.append(a).append('\n');
}
System.out.println(sb);
}
}
문제를 다 해결한 후 다른 사람들이 어떤 방법으로 문제를 풀었을지 궁금하여 서치해보니 Bubble Sort 외에도 Arrays.sort()를 사용하여 문제를 풀 수 있다는 것을 발견하였다.
Arrays.sort()를 사용하면 코드가 더 간단해진다.
(Arrays.sort()에 대해선 Collections.sort()와 함께 추가적인 게시글을 작성 후 링크를 달아두어야겠다.)
코드 자체는 위에서 풀어둔 코드에서 BufferedReader와 StringBuilder는 그대로 사용하고, 중간에 Bubble Sort한 for문 부분만 Arrays.sort()로 변경해주면 된다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class P2750 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine());
int [] arr = new int[n];
for(int i = 0; i < n; i++) {
arr[i] = Integer.parseInt(br.readLine());
}
// Bubble Sort를 다음으로 대체
Arrays.sort(arr);
for(int a : arr) {
sb.append(a).append('\n');
}
System.out.println(sb);
}
}