[BOJ알고리즘, C++]#11728_배열 합치기, 정렬, 병합 정렬

2024. 2. 6. 20:02· 문제 풀이/BOJ 문제 풀이
목차
  1. #1. 문제
  2. #2. 풀이
  3. 1. 병합 정렬
  4. 2. 병합 정렬의 기본 개념! 
  5. #3. 코드

 

#1. 문제

 

11728번: 배열 합치기

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

www.acmicpc.net

 


 

#2. 풀이

 

1. 병합 정렬

 

[알고리즘]#3_정렬 알고리즘

#1. 개념 1. 정렬 알고리즘 [정의] : 정렬 알고리즘은 데이터를 특정한 순서로 재배치하는 알고리즘입니다. 정렬 순서는 일반적으로 오름차순(ascending order/less) 또는 내림차순(descending order/greater)으

webddevys.tistory.com

 

[정의] : 병합 정렬은 분할-정복 기반의 정렬 알고리즘입니다. 병합 정렬은 주어진 배열을 두 개의 작은 부분 배열로 분할하고, 각 부분 배열을 재귀적으로 정렬하여 최종적으로 두 배열을 하나의 배열로 병합하여 하나의 정렬된 배열을 얻는 정렬 알고리즘입니다.

[성능] : 병합 정렬의 최악 시간 복잡도는 O(n log n)입니다. 비교적 효율적인 정렬 알고리즘이지만, 정렬 과정에서 추가적인 메모리 공간이 필요합니다.

 

2. 병합 정렬의 기본 개념! 

  1. 깊게 생각할 필요 없이, 병합 정렬의 수행 과정 중 두 부분 배열을 비교 연산 후 하나의 배열로 병합하는 작업만 수행해 주면 됩니다.
  2. 이미 정렬된 두 배열은 서로를 비교한 후, 나머지 원소들은 차례대로 배열에 삽입해주면 되겠습니다.

 


 

#3. 코드

 

#include <iostream>
#include <vector>
#include <string>
using namespace std;

typedef long long ll;

int N, M;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);

    cin >> N >> M;

    vector<int> arr1(N);
    vector<int> arr2(M);

    for (int i = 0; i < N; ++i)
    {
        cin >> arr1[i];
    }

    for (int i = 0; i < M; ++i)
    {
        cin >> arr2[i];
    }

    vector<int> res(N + M);

    int leftIdx = 0;
    int rightIdx = 0;
    int resIdx = 0;

    while (leftIdx < N && rightIdx < M)
    {
        if (arr1[leftIdx] < arr2[rightIdx])
        {
            res[resIdx++] = arr1[leftIdx++];
        }
        else
        {
            res[resIdx++] = arr2[rightIdx++];
        }
    }

    while (leftIdx < N)
    {
        res[resIdx++] = arr1[leftIdx++];
    }

    while (rightIdx < M)
    {
        res[resIdx++] = arr2[rightIdx++];
    }

    for (int i = 0; i < N + M; ++i)
        cout << res[i] << ' ';

    return 0;
}

 


 

 

 

 

저작자표시 (새창열림)

'문제 풀이 > BOJ 문제 풀이' 카테고리의 다른 글

[BOJ알고리즘, C++]#1865_웜홀, 최다 경로 알고리즘, 길 찾기 알고리즘, 벨만-포드 알고리즘  (0) 2024.02.06
[BOJ알고리즘, C++]#1068_트리, 그래프 탐색, 완전 탐색, 깊이 우선 탐색, DFS  (0) 2024.02.06
[BOJ알고리즘, C++]#2470_두 용액, 정렬, 퀵 정렬, 투 포인터  (1) 2024.02.05
[BOJ알고리즘, C++]#3273_두 수의 합, 퀵 정렬, 투 포인터  (0) 2024.02.05
[BOJ알고리즘, C++]#11004_K번째 수, nth_element 함수 활용  (0) 2024.02.05
  1. #1. 문제
  2. #2. 풀이
  3. 1. 병합 정렬
  4. 2. 병합 정렬의 기본 개념! 
  5. #3. 코드
'문제 풀이/BOJ 문제 풀이' 카테고리의 다른 글
  • [BOJ알고리즘, C++]#1865_웜홀, 최다 경로 알고리즘, 길 찾기 알고리즘, 벨만-포드 알고리즘
  • [BOJ알고리즘, C++]#1068_트리, 그래프 탐색, 완전 탐색, 깊이 우선 탐색, DFS
  • [BOJ알고리즘, C++]#2470_두 용액, 정렬, 퀵 정렬, 투 포인터
  • [BOJ알고리즘, C++]#3273_두 수의 합, 퀵 정렬, 투 포인터
Hardii2
Hardii2
Hardii2
개발 블로그
Hardii2
전체
오늘
어제
  • 분류 전체보기 N
    • 알고리즘 N
    • 웹 개발
      • Node.js
      • React
    • 게임개발
      • DirectX12
      • 관련 지식
      • Unreal C++
      • Unreal 블루프린트
    • 언어
      • Effective C++
      • Basic C++
      • 디자인 패턴
      • 자료구조
      • 기술 질문
    • 문제 풀이
      • BOJ 문제 풀이
      • Programmers 문제 풀이
      • geeksForgeeks 문제 풀이
    • 수학
      • 확률과 통계
      • 게임수학
    • 개인프로젝트
    • 그룹프로젝트
      • PM
      • Dev
    • Github

블로그 메뉴

  • 홈
  • 글쓰기

공지사항

인기 글

태그

  • C++
  • 알고리즘
  • programmers
  • 개발
  • unreal
  • BOJ
  • set
  • stl
  • 그래프
  • dfs
  • BFS
  • 최단 경로
  • Unreal Blueprint
  • 정렬
  • DP
  • Effective C++
  • 디자인 패턴
  • 트리
  • 우선순위 큐
  • 기술 질문

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Hardii2
[BOJ알고리즘, C++]#11728_배열 합치기, 정렬, 병합 정렬
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.