공부 자료/알고리즘

(C/C++) 백준 11728 - 배열 합치기

뚜루뚜루세니 2021. 7. 9. 13:16
728x90

문제 출처:

 

1. 코드

#include <iostream>
#include <algorithm>
using namespace std;

int n, m;
int a[1000000];
int b[1000000];
int sum[2000000];

int main() {

	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 i = 0, j = 0,k = 0; //i=a의 인덱스 j=b의 인덱스 k는 합치는 배열의 인덱스
	while (i < n && j < m) {
		if (a[i] < b[j]) {
			sum[k++] = a[i++];
		}
		else
			sum[k++] = b[j++];
	}
	while (i < n) {
		sum[k++] = a[i++];
	}
	while (j < m) {
		sum[k++] = b[j++];
	}

	for (int i = 0; i < n + m; i++) {
		printf("%d ", sum[i]);

	}
}

2. 해결 과정

정렬이 이미 되어있다고 알려줬기 때문에 인덱스만 이용해서 문제를 풀 수 있다.

합치는 배열 sum을 생성해서, 입력한 두 배열의 인덱스 값을 비교하고, 배열 값의 크기를 비교해서 sum에 차근차근 넣어주면 된다. 

 

3. 느낀점

이미 정렬되어 있다는 것을 놓쳐서 시간 초과가 났긴 했지만, 인덱스만 사용해서 푸니까 시간 초과문제를 해결할 수 있었다. 문제를 더 꼼꼼하게 읽어야 겠다. 정렬 어려워잉ㅜ

728x90