algorithm/Two Pointer

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

gartenhh 2021. 5. 14. 03:32

문제

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

 

11728번: 배열 합치기

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

www.acmicpc.net

코드

#include<iostream>
using namespace std;
int n, m, arrA[1000001], num;

int main() {
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);

	cin >> n >> m;
	for (int i = 0; i < n; i++)
		cin >> arrA[i];
	int idx = 0;
	for (int i = 0; i < m; i++) {
		cin >> num;
		
		while (arrA[idx] < num && idx < n) {
			cout << arrA[idx] << ' ';
			idx++;
		}
		cout<< num<< ' ';
	}
	for (; idx < n; idx++) {
		cout<< arrA[idx]<<' ';
	}

}

풀이방법

배열 A의 값을 입력받아 저장한 뒤, 배열 B의 값을 입력받으며 배열 A와 비교해 더 작은 수를 차례대로 출력한다.

고민과정

처음에 반복문이 아니라 그냥 조건문을 이용해서 원하던 결과가 나오지 않았다. 그리고 더 작은 수를 바로 출력하지 않고 또다른 배열에 저장했다가 출렸했더니 시간초과가 떴다. idx값이 n을 넘을 경우를 고려하지 않아 틀렸었다.