정렬되어있는 두 배열 A와 B가 주어진다. 두 배열을 합친 다음 정렬해서 출력하는 프로그램을 작성하시오.
첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000)
둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거나 같은 정수이다.
첫째 줄에 두 배열을 합친 후 정렬한 결과를 출력한다.
2 2
3 5
2 9
2 3 5 9
2 1
4 7
1
1 4 7
4 3
2 3 5 9
1 4 7
1 2 3 4 5 7 9
이 문제는 배열 2개를 하나로 합치는 문제여서 각 배열에 index 변수를 주고 비교하며 작은 것부터 출력해서 풀었다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().split(" ");
int N = Integer.parseInt(str[0]);
int M = Integer.parseInt(str[1]);
int[] A = new int[N];
int[] B = new int[M];
StringBuilder result = new StringBuilder();
for(int i=0; i<2; i++) {
String[] input = br.readLine().split(" ");
if(i==0) {
for(int j=0; j<N; j++)
A[j] = Integer.parseInt(input[j]);
}
else {
for(int j=0; j<M; j++)
B[j] = Integer.parseInt(input[j]);
}
}
int a=0;
int b=0;
while(true) {
if(a==N && b==M)
break;
if(a==N && b!=M) {
while(b!=M) {
result.append(B[b]+" ");
b++;
}
}
else if(a!=N && b==M) {
while(a!=N) {
result.append(A[a]+" ");
a++;
}
}
else if(a!=N && b!=M) {
if(A[a]<=B[b]) {
result.append(A[a]+" ");
a++;
}
else {
result.append(B[b]+" ");
b++;
}
}
}
System.out.println(result);
}
}