[BOJ/백준/C++] 24060번 알고리즘 수업 - 병합 정렬 1

2024. 1. 28. 23:10·Coding Test/Baekjoon
728x90
반응형
 

24060번: 알고리즘 수업 - 병합 정렬 1

첫째 줄에 배열 A의 크기 N(5 ≤ N ≤ 500,000), 저장 횟수 K(1 ≤ K ≤ 108)가 주어진다. 다음 줄에 서로 다른 배열 A의 원소 A1, A2, ..., AN이 주어진다. (1 ≤ Ai ≤ 109)

www.acmicpc.net


📌 접근 방법

  • 합병정렬을 이용하여 풀었다.

 

✔ 합병정렬(Merge Sort)

출처 : 위키백과

  • 배열이 2 개의 배열로 분할되고 크기가 1/2로 감소하는 분할 정복 알고리즘
    • 크기가 n인 배열을 n/2 크기의 2개의 배열로 분할하는 것을 반복
    • 더이상 분할할 수 없을 때 오름차순으로 다시 정렬하며 합병하는 것 !
  • 성능 : nlogn

 

✅  Pass Code

#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<iterator>
#include<map>
#include<set>
#include<unordered_set>
#include <stack>
#include<queue>
#include<deque>

using namespace std;
int cnt=0,K,result=-1;
void mergeSort(int p, int r, int *arr){
    if(p>=r)return ;
    int q=(p+r)/2;
    mergeSort(p,q,arr);
    mergeSort(q+1,r,arr);
    int i=p,j=q+1,k=1;
    int tmp[r];
    while(i<=q&&j<=r){
        if(arr[i]<=arr[j]){
            tmp[k++]=arr[i++];
        }
        else{
            tmp[k++]=arr[j++];
        }
    }
    while(i<=q){
        tmp[k++]=arr[i++];

    }
    while(j<=r)tmp[k++]=arr[j++];
    i=p,k=1;
    while(i<=r){
        arr[i]=tmp[k];
        cnt++;
        if(cnt==K)result=arr[i];
        i++,k++;
    }
}
int main() {

    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

    int N;
    cin>>N>>K;
    int arr[N];
    for(int i=0; i<N; i++){
        cin>>arr[i];
    }
    mergeSort(0,N-1,arr);
    cout<<result;
    return 0;
}
728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Coding Test > Baekjoon' 카테고리의 다른 글

[BOJ/백준/C++] 17103번 골드바흐 파티션  (2) 2024.01.28
[BOJ/백준/C++] 4779번 칸토어 집합  (1) 2024.01.28
[BOJ/백준/C++] 5430번 AC  (1) 2024.01.28
[BOJ/백준/C++] 1021번 회전하는 큐  (0) 2024.01.28
[BOJ/백준/C++] 1966번 프린터 큐  (0) 2024.01.28
'Coding Test/Baekjoon' 카테고리의 다른 글
  • [BOJ/백준/C++] 17103번 골드바흐 파티션
  • [BOJ/백준/C++] 4779번 칸토어 집합
  • [BOJ/백준/C++] 5430번 AC
  • [BOJ/백준/C++] 1021번 회전하는 큐
예롱메롱
예롱메롱
  • 예롱메롱
    예롱이의 개발 블로그
    예롱메롱
  • 전체
    오늘
    어제
    • 전체보기 (274)
      • 프로젝트 (35)
        • Wedle (12)
        • 인스타그램 클론 코딩 (13)
        • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (10)
      • 인프런 Spring 강의 정리 (79)
        • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 .. (7)
        • Spring 핵심 원리 - 기본편 (9)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 (8)
        • 자바 ORM 표준 JPA 프로그래밍 - 기본편 (11)
        • 실전! 스프링 부트와 JPA 활용1 - 웹 애플리.. (6)
        • 실전! 스프링 부트와 JPA 활용2 - API 개.. (5)
        • 실전! 스프링 데이터 JPA (7)
        • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (7)
        • 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 (11)
        • 실전! Querydsl (8)
      • Cloud (3)
      • Spring (6)
        • spring boot (5)
        • 소셜로그인 (1)
      • Docker (2)
      • DevOps (0)
      • Coding Test (114)
        • Programmers (37)
        • Baekjoon (76)
      • KB It's Your Life 6기 (1)
      • CS (18)
        • 알고리즘 (13)
        • 컴퓨터 구조 (1)
        • Operating System (0)
        • Network (0)
        • Database (4)
      • git (1)
      • Language (15)
        • Java (5)
        • C++ (6)
        • Python (4)
    • GITHUB GITHUB
    • INSTAGRAM INSTAGRAM
  • hELLO· Designed By정상우.v4.10.3
예롱메롱
[BOJ/백준/C++] 24060번 알고리즘 수업 - 병합 정렬 1
상단으로

티스토리툴바