it 취업을 위한 알고리즘 문제풀이 입문 : 39. 두 배열 합치기
🙇♀️두 배열 합치기
오름차순으로 정렬이 된 두 배열이 주어지면 두 배열을 오름차순으로 합쳐 출력하는 프로그램을 작성하세요.
▣ 입력설명
첫 번째 줄에 첫 번째 배열의 크기 N(1<=N<=100)이 주어집니다.
두 번째 줄에 N개의 배열 원소가 오름차순으로 주어집니다.
세 번째 줄에 두 번째 배열의 크기 M(1<=M<=100)이 주어집니다.
네 번째 줄에 M개의 배열 원소가 오름차순으로 주어집니다.
각 배열의 원소는 int형 변수의 크기를 넘지 않습니다.
▣ 출력설명
오름차순으로 정렬된 배열을 출력합니다.
▣ 입력예제 1
3
1 3 5
5
2 3 6 7 9
▣ 출력예제 1
1 2 3 3 5 6 7 9
🚀풀이
문제의 조건대로 두 개의 벡터를 받아주고, 합칠 벡터를 만들었다.
합칠 때, 한쪽이 다 집어 넣게 되면 남은 한 쪽을 끝까지 넣어줘야한다.
정답 벡터의 위치는 cur이라는 변수로 관리하였다.
vector<int> seq1;
vector<int> seq2;
void solve()
{
int N, M;
cin >> N;
seq1 = vector<int>(N);
for (int i = 0; i < N; ++i)
{
cin >> seq1[i];
}
cin >> M;
seq2 = vector<int>(M);
for (int i = 0; i < M; ++i)
{
cin >> seq2[i];
}
int pos1 = 0, pos2 = 0, cur = 0;
vector<int> res(N + M);
for (int i = 0; i < N + M; ++i)
{
if (pos1 == N)
break;
if (pos2 == M)
break;
if (seq1[pos1] < seq2[pos2])
{
res[i] = seq1[pos1];
pos1++;
}
else
{
res[i] = seq2[pos2];
pos2++;
}
cur++;
}
if (pos1 != N)
{
while (pos1 < N)
{
res[cur] = seq1[pos1];
pos1++;
cur++;
}
}
else
{
while (pos2 < M)
{
res[cur] = seq2[pos2];
pos2++;
cur++;
}
}
for (int i = 0; i < N + M; ++i)
cout << res[i] << " ";
}
🚀전체 코드
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#include<iostream>
#include <fstream>
#include <vector>
using namespace std;
vector<int> seq1;
vector<int> seq2;
void solve()
{
int N, M;
cin >> N;
seq1 = vector<int>(N);
for (int i = 0; i < N; ++i)
{
cin >> seq1[i];
}
cin >> M;
seq2 = vector<int>(M);
for (int i = 0; i < M; ++i)
{
cin >> seq2[i];
}
int pos1 = 0, pos2 = 0, cur = 0;
vector<int> res(N + M);
for (int i = 0; i < N + M; ++i)
{
if (pos1 == N)
break;
if (pos2 == M)
break;
if (seq1[pos1] < seq2[pos2])
{
res[i] = seq1[pos1];
pos1++;
}
else
{
res[i] = seq2[pos2];
pos2++;
}
cur++;
}
if (pos1 != N)
{
while (pos1 < N)
{
res[cur] = seq1[pos1];
pos1++;
cur++;
}
}
else
{
while (pos2 < M)
{
res[cur] = seq2[pos2];
pos2++;
cur++;
}
}
for (int i = 0; i < N + M; ++i)
cout << res[i] << " ";
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
//freopen("input.txt", "rt", stdin);
solve();
return 0;
}