티스토리 뷰

알고리즘

39. 두배열 합치기

홍복치 2021. 1. 15. 20:15

인프런 - 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
최근에 올라온 글
Total
Today
Yesterday