인프런 - it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비 강의를 바탕으로 공부한 내용입니다.
문제는 비공개로 입력예제와 출력예제만을 가지고 포스팅
입력예제 1
3
1 3 5
5
2 3 6 7 9
출력예제 1
1 2 3 3 5 6 7 9
풀이
- 세 개의 배열이 존재 (a / b / c배열)
- c배열에 a,b 두 배열을 합친다
- 세 배열에 대한 포인터가 존재(p1, p2, p3)
- a[p1], b[p2]의 값을 비교해서 작은 쪽을 c[p3]에 넣어줌
- 값을 c에 넣으면 p1 또는 p2의 값이 증가, p3값도 증가
- 두 배열의 길이가 다르기 때문에 남은 쪽이 존재 => while문을 통해 남은 애들까지 c배열에 넣어줌
#include <stdio.h>
#include <algorithm>
using namespace std;
int a[101], b[101], c[101];
//39. 두 배열 합치기
int main(){
int i, n, m, p1=1, p2=1, p3=1;
scanf("%d",&n); //a배열 개수
for(i=1;i<=n;i++){
scanf("%d", &a[i]);
}
scanf("%d",&m); //b배열 개수
for(i=1;i<=m;i++){
scanf("%d", &b[i]);
}
while(p1<=n && p2<=m){
if(a[p1]<b[p2]){
c[p3++]=a[p1++];
}else{
c[p3++]=b[p2++];
}
}
//남은 쪽 채우기
while(p1<=n) c[p3++]=a[p1++];
while(p2<=m) c[p3++]=b[p2++];
for(i=1;i<p3;i++){
printf("%d ", c[i]);
}
return 0;
}
'알고리즘' 카테고리의 다른 글
63. 인접행렬 (0) | 2021.01.19 |
---|---|
62. 병합정렬 (0) | 2021.01.18 |
프로그래머스-타겟 넘버[DFS] (0) | 2021.01.14 |
61. 특정 수 만들기[DFS] (0) | 2021.01.13 |
60. 합이 같은 부분집합[DFS] (0) | 2021.01.11 |