본문 바로가기

BOJ

[11728 번] 배열 합치기

SMALL

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

 

11728번: 배열 합치기

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

www.acmicpc.net

문제 자체 상황에서는 merge sort를 구현을 할때 많이 사용되는 논리를 가져와서 문제를 풀었스니다.

문제에서 가장 중요한 부분은 2개의 정렬이 되어있는 배열을 합치는 과정에서 조건문인데, 서로 다른 미지수를 사용해서 인덱스를 다르게 증가시켜야하기 때문에 idx1, idx2를 사용했습니다.

 

그리고 조건문 중에서 가장 중요한 idx1==n , idx == m일 때의 조건문을 넣어주어 한 배열이 다른 배열보다 먼저 합치는 과정이 끝났을 때 나머지 배열을 처리하는 조건을 넣어야합니다.

 

코드는 간단하게 다음과 같이 구성하였습니다.

#include <bits/stdc++.h>
using namespace std;

int n,m;
int arr1[1000005];
int arr2[1000005];
int arr[2000005];

int main(void){
    ios::sync_with_stdio(0);
    cin.tie(0);
    cin >> n >> m ;
    for(int i=0; i< n; i++)
        cin >> arr1[i];
    for(int j=0; j<m ; j++)
        cin >> arr2[j];
    
    int idx1=0, idx2=0;
    
    for(int k=0; k < n+m ; k++){
        if(idx1 == n)
            arr[k] = arr2[idx2++];
        else if(idx2 == m)
            arr[k] = arr1[idx1++];
        
        else if(arr1[idx1]<=arr2[idx2] )
            arr[k] = arr1[idx1++];
        else 
            arr[k] = arr2[idx2++];
    }
    
    for(int k=0; k<n+m; k++)
        cout << arr[k]<<' ';
    
    return 0;
}
LIST

'BOJ' 카테고리의 다른 글

[1715] 카드 정렬하기 (python)  (2) 2024.01.05
[18808 번] 스티커 붙이기  (1) 2023.02.05
[15683 번] 감시  (1) 2023.02.03
[9663번] N-Queen  (0) 2023.02.01
[15649번] N과 M(1)  (0) 2023.02.01