Study hard

(c++)백준 11728번: 배열 합치기 본문

백준/분할 정복

(c++)백준 11728번: 배열 합치기

Nimgnoej 2020. 6. 25. 00:09

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

 

11728번: 배열 합치기

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

www.acmicpc.net

[풀이]

mergesort의 merge를 차용하여 풀었다.

cin, cout을 쓰면 시간 초과가 떠서 printf와 scanf를 사용하였다. 

 

#include <iostream>
using namespace std;
#define Max 1000000

int N, M;
int A[Max], B[Max];
int C[Max+Max];

void solution() {
	cin >> 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 i = 0, j = 0, k = 0;

	while (i < N && j < M) {
		if (A[i] < B[j]) {
			C[k++] = A[i++];
		}
		else {
			C[k++] = B[j++];
		}
	}

	while (i < N) {
		C[k++] = A[i++];
	}
	while (j < M) {
		C[k++] = B[j++];
	}

	for (int i = 0; i < N + M; i++) {
		printf("%d ", C[i]);
	}
	printf("\n");
}

int main() {
	solution();
	return 0;
}