녕의 학습 기록
백준_2751 수 정렬하기2 (병합정렬) 본문
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class BJ_2751 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringBuilder sb = new StringBuilder();
int[] inputArr = new int[n];
for(int i=0; i<n; i++) {
inputArr[i] = Integer.parseInt(br.readLine());
}
int[] resultArr = mergeSort(inputArr);
for(int i=0; i<n; i++) {
sb.append(resultArr[i]).append('\n');
}
System.out.println(sb);
}
static int[] mergeSort(int[] arr) {
if(arr.length==1) {
return arr;
} else {
int[] fArr = new int[arr.length/2];
int[] bArr = new int[arr.length - fArr.length];
int tempInd = 0;
for(int i=0; i<arr.length/2; i++) {
fArr[tempInd++] = arr[i];
}
tempInd = 0;
for(int i=arr.length/2; i<arr.length; i++) {
bArr[tempInd++] = arr[i];
}
return merge(mergeSort(fArr), mergeSort(bArr));
}
}
static int[] merge(int[] aArr, int[] bArr) {
int[] mergeArr = new int[aArr.length + bArr.length];
int mergeInd = 0;
int i = 0;
int j = 0;
while((i!=aArr.length && j!=bArr.length)) {
if(aArr[i] > bArr[j]) {
mergeArr[mergeInd++] = bArr[j++];
} else {
mergeArr[mergeInd++] = aArr[i++];
}
}
if(i==aArr.length) {
while(j<bArr.length) {
mergeArr[mergeInd++] = bArr[j++];
}
} else if(j==bArr.length){
while(i<aArr.length) {
mergeArr[mergeInd++] = aArr[i++];
}
}
return mergeArr;
}
}
좀 더 효율적인 방법
https://kjyyjk.tistory.com/234
2751번: 수 정렬하기 2
첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄부터 N개의 줄에는 수가 주어진다. 이 수는 절댓값이 1,000,000보다 작거나 같은 정수이다. 수는 중복되지 않는다.
www.acmicpc.net
'Algorithm > Algorithm 문제' 카테고리의 다른 글
백준_1517 버블 소트 (병합정렬) (0) | 2024.01.17 |
---|---|
백준_2751 수 정렬하기2 (풀이 참고 코드개선) (0) | 2024.01.17 |
백준_11004 k번째 수 (퀵정렬) (0) | 2024.01.15 |
백준_11399 ATM (삽입정렬 & 구간합배열) (0) | 2024.01.14 |
백준_1427 소트인사이드 (선택정렬) (0) | 2024.01.13 |