Suhwanc

문제 링크 : https://www.acmicpc.net/problem/11728

 

11728번: 배열 합치기

첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000) 둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거나 같은 정수이다.

www.acmicpc.net

 

문제

정렬되어있는 두 배열 A와 B가 주어진다. 두 배열을 합친 다음 정렬해서 출력하는 프로그램을 작성하시오.

 

입력

첫째 줄에 배열 A의 크기 N, 배열 B의 크기 M이 주어진다. (1 ≤ N, M ≤ 1,000,000)

둘째 줄에는 배열 A의 내용이, 셋째 줄에는 배열 B의 내용이 주어진다. 배열에 들어있는 수는 절댓값이 109보다 작거나 같은 정수이다.

 

출력

첫째 줄에 두 배열을 합친 후 정렬한 결과를 출력한다.

 

풀이

간단한 병합 정렬 문제이다.

이미 정렬되어있는 두 배열의 최소값들을 계속 비교해가면서 다른 배열에 추가하고,

비교가 끝났으면 두 배열 중 원소가 남은 배열을 그대로 담는다.

 

소스코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
using namespace std;
int a[1000001];
int b[1000001];
int c[2000001];
int main()
{
    
    int n, m; scanf("%d%d"&n, &m);
    for (int i = 0; i < n; i++) {
        scanf("%d"&a[i]);
    }
    for (int i = 0; i < m; i++) {
        scanf("%d",&b[i]);
    }
    
    int a_num = 0, b_num = 0;
    int k = 0;
    while (a_num < n && b_num < m) {
        if (a[a_num] <= b[b_num]) {
            c[k++= a[a_num++];
        }
        else c[k++= b[b_num++];
    }
    while (a_num < n) c[k++= a[a_num++];
    while (b_num < m) c[k++= b[b_num++];
    for (int i = 0; i < k; i++) {
        printf("%d ", c[i]);
    }
    return 0;
}
cs

개발환경 : Visual Studio 2019

지적, 조언 언제든지 환영입니다~~

'백준 문제풀이' 카테고리의 다른 글

백준 2263번 트리의 순회  (0) 2020.01.02
백준 1780번 종이의 개수  (0) 2020.01.02
백준 2873번 롤러코스터  (0) 2020.01.02
백준 1080번 행렬  (0) 2020.01.02
백준 1783번 병든 나이트  (0) 2020.01.01