수학과의 좌충우돌 프로그래밍

[C++] BAEKJOON 11728 배열 합치기 본문

알고리즘/C++

[C++] BAEKJOON 11728 배열 합치기

ssung.k 2019. 9. 17. 20:19

https://www.acmicpc.net/problem/11728

merge sort 에서 나눠진 배열을 합치는 과정과 같습니다.

두 배열을 계속 비교하며 작은 값을 새로운 배열에 넣어주고, 한 쪽 배열의 수들이 끝났으면 남은 배열의 값들을 그대로 복사해서 뒤에 추가해주도록 합니다.

#include <iostream>
#include <algorithm>

using namespace std;

int a[1000001];
int b[1000001];
int c[2000002];

int main(int argc, const char * argv[]) {
    cin.tie(0); ios::sync_with_stdio(false);
    int N,M;
    cin >> N >> M;
    
    for (int i=0;i<N;i++){
        cin >> a[i];
    }
    for (int i=0;i<M;i++){
        cin >> b[i];
    }
    
    int n = 0;
    int m = 0;
    int index = 0;
    // 한 배열이 끝날 때까지 비교해주며 작은 값부터 채워주기
    while (n < N && m < M){
        if (a[n] < b[m]){
            c[index++] = a[n++];
        }
        else{
            c[index++] = b[m++];
        }
    }
    // 남은 배열의 뒷 부분 추가
    while (n<N) c[index++] = a[n++];
    while (m<M) c[index++] = b[m++];
    
    for (int i=0;i<N+M;i++){
        cout << c[i] << " ";
    }
    cout << "\n";
    
    return 0;
}

 

Comments