Goal

주어진 두 배열을 오름차순으로 병합이 되도록하는 프로그램을 C언어로 구현할 수 있다.

문제

오름차순으로 정렬이 된 두 배열이 주어지면 두 배열을 오름차순으로 합쳐 출력하는 프로그램을 작성하세요.

입력 설명

첫 번째 줄에 첫번째 배열의 크기가 주어진다.
두 분째 줄에 N개의 배열 원소가 오름차순으로 주어진다.
세 번째 줄에 두번째 배열의 크기가 주어진다.
네 번째 줄에 M개의 배열 원소가 오름차순으로 주어진다.
(n,m 은 1보다크고 100보다 작다)

입력 예시
3
1 3 5
5
2 3 6 7 9

출력 설명

오름차순으로 정렬된 배열을 출력 한다.

출력예시
1 2 3 3 5 6 7 9

설명

입력받은 두개의 배열은 오름차순으로 정렬된 상태 입니다.
첫번째 배열을 a, 두번째 배열을 b라고 하겠습니다.

a : 1 3 5
b : 2 3 6 7 9

a와 b배열의 첫번째 원소를 비교 하겠습니다.
a[0] = 1, b[0] = 2 입니다.

a[0] < b[0] 이므로 a[0]의 값을 c[0]에 추가 시키고, a의 인덱스값(p1) 은 1증가 시키고, b의 인덱스 값(p2)은 제자리를 유지하겠습니다.

a배열,b배열의 인덱스값이 n이나,m을 초과하지 않을때까지 계속해서 반복을 하다가, a나 b중 하나라도 초과를 한다면 반복을 종료합니다.

a,b 배열중 한개는 배열의 끝까지 순회하지 못하고 종료를 하였으므로, 나머지 숫자들도 c배열에 추가시켜주면 오름차순으로 병합된 배열이 완성이 됩니다.

코드

#include <stdio.h>

int main() {
    int c[300];
    int b[101];
    int a[101];    
     int i,n,m,p1=0,p2=0,p3=0;

     scanf("%d",&n);
     for(i = 0; i < n; i++) scanf("%d",&a[i]);
     scanf("%d",&m);
     for(i = 0; i < m; i++) scanf("%d",&b[i]);

     while(p1<n && p2<m) {
         if(a[p1] < b[p2]) {
             c[p3++] = a[p1++];

         }else {
             c[p3++] = b[p2++];

         }
    }
    while(p1<n) {
        c[p3++] = a[p1++];

    }
    while(p2<m) {
        c[p3++] = b[p2++];

    }
     for(i = 0; i < p3; i++) printf("%d ",c[i]);

    return 0;
}