정렬되어있는 두 배열 A와 B가 주어진다. 두 배열을 합친 다음 정렬해서 출력하는 프로그램을 작성하시오.
첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000)
둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 10^9보다 작거나 같은 정수이다.
첫째 줄에 두 배열을 합친 후 정렬한 결과를 출력한다.
2 2
3 5
2 9
2 3 5 9
병합 정렬을 이용해서 정렬을 하면서 배열을 합쳐주었다.
병합 정렬은 아래와 같은 방법으로 진행한다.


const fs = require('fs');
let [input, ...arrays] = fs.readFileSync(0, 'utf-8').toString().trim().split('\n');
let N = Number(input.trim().split(' ')[0]);
let M = Number(input.trim().split(' ')[1]);
let A = arrays[0].trim().split(' ').map(Number);
let B = arrays[1].trim().split(' ').map(Number);
function merge(A, B) {
let indexA = 0;
let indexB = 0;
let sorted = [];
while (true) {
if (indexA !== A.length && indexB !== B.length) {
if (A[indexA] <= B[indexB]) {
sorted.push(A[indexA++]);
} else {
sorted.push(B[indexB++]);
}
}
if (indexA === A.length) {
sorted = [...sorted, ...B.slice(indexB)];
break;
} else if (indexB === B.length) {
sorted = [...sorted, ...A.slice(indexA)];
break;
}
}
return sorted;
}
console.log(merge(A, B).join(' '));
간단한 정렬이 아닌 정렬 알고리즘으로 풀이해야하는 문제는 정말 오랜만인 것 같다. 제시되는 배열들이 정렬된 상태였기에 병합 정렬이 적절하다고 해서 병합 정렬로 풀이했다. 유형에 맞는 정렬 알고리즘도 슬슬 공부해야겠다.