[백준] 11728번 배열 합치기
in Algorithms on BOJ
문제설명
문제
정렬되어있는 두 배열 A와 B가 주어진다. 두 배열을 합친 다음 정렬해서 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000)
둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거나 같은 정수이다.
출력
첫째 줄에 두 배열을 합친 후 정렬한 결과를 출력한다.
접근
정렬된 배열이 주어지기 때문에 두 배열의 값을 비교하면서 새로운 배열에 합치면 된다. (굳이 새로운 배열에 저장하지 않고 출력만해도 될 듯하다.)
코드
#include <iostream>
using namespace std;
void merge(int* arrA, int a, int* arrB, int b, int* arrC){
int aa, bb, cc;
aa = bb = cc = 0;
while(aa < a || bb < b){
if(aa == a){
while(bb != b){
arrC[cc++] = arrB[bb++];
}
}
if(bb == b){
while(aa != a){
arrC[cc++] = arrA[aa++];
}
}
if(arrA[aa] < arrB[bb])
arrC[cc++] = arrA[aa++];
else
arrC[cc++] = arrB[bb++];
}
}
int main(){
cin.tie(0);
cout.tie(0);
ios_base::sync_with_stdio(false);
int n, m;
cin >> n >> m;
int* arrA = new int[n];
int* arrB = new int[m];
int* arrC = new int[n+m];
for(int i=0; i<n; i++)
cin >> arrA[i];
for(int i=0; i<m; i++)
cin >> arrB[i];
merge(arrA, n, arrB, m, arrC);
for(int i=0; i<n+m; i++)
cout << arrC[i] << ' ';
}
참고
이 글이 도움이 되셨다면 추천 클릭을 부탁드립니다 :)