[백준] 11728번 배열 합치기


문제설명

문제

정렬되어있는 두 배열 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] << ' '; 
}

참고

BOJ #11728

이 글이 도움이 되셨다면 추천 클릭을 부탁드립니다 :)




© 2021. by Gyeong-Hyeon Kim

Powered by ddamddi