[BOJ알고리즘, C++]#1655_가운데를 말해요, 우선순위 큐, 최소 힙, 최대 힙

2023. 11. 23. 18:00· 문제 풀이/BOJ 문제 풀이
목차
  1.  
  2. [BOJ알고리즘, C++]#1655_가운데를 말해요

 

[BOJ알고리즘, C++]#1655_가운데를 말해요

 

BOJ 알고리즘 문제 풀이, 1655번 문제 "가운데를 말해요"

C++의 STL이 제공하는 priority_queue 컨테이너를 활용하는 문제

 


 

 

Overview

 

  1. 문제
  2. 풀이
  3. 코드

 

#1. 문제

 

#2. 풀이

1. 우선순위 큐

 

[자료구조]#7_우선순위 큐

[자료구조]#7_우선순위 큐 우선순위 큐 자료구조에 대해 알아보겠습니다. Overview 개념 구현 참고 #0. 개념 1. 우선순위 큐 정의 : 우선순위 큐(Priority Queue)는 원소들이 우선순위에 따라 정렬된 연결

webddevys.tistory.com

 

  • [정의] : 우선순위 큐는 원소들이 우선순위에 따라 정렬된 연결 자료구조로, 원소의 삽입 순서와 무관하게 가장 높은 우선순위를 가진 원소가 먼저 제거되는 특징이 있습니다. 우선순위 큐는 원소 간 우선순위를 유지하기 위해 삽입/삭제 작업 수행 시 정렬 작업을 자동적으로 수행하는 자료구조입니다. 결과적으로, 우선순위 큐는 내부적으로 항상 정렬된 상태를 유지합니다. 일반적으로, 우선순위 큐는 "힙" 자료구조를 통해 구현합니다.
  • [성능] : 우선순위 큐의 삽입/삭제 작업의 평균/최악 시간 복잡도는 O(log n)입니다. 왜냐하면, 힙 자료구조의 삽입/삭제 작업 시 수행되는 정렬 작업에 소요되는 시간 때문입니다.
  • [활용] : 우선순위 큐는 대기열 관리, 작업 스케줄링, 그리고 최단 경로 탐색 등 우선순위에 따라서 결과 값이 달라질 때 사용하기 용이합니다.
  • [단점] : 우선순위 큐는 정렬 작업 수행 시 추가적인 메모리 공간이 필요하며, 그 구현이 비교적 복잡합니다.

 

2. priority_queue

 

[Basic C++] #69_priority_queue

[Basic C++] #69_priority_queue C++의 STL에서 제공하는 priority_queue컨테이너에 대해 알아보겠습니다. Overview 개념 선언 멤버 함수 예제 #0. 개념 1. 우선순위 큐? [자료구조]#7_우선순위 큐 [자료구조]#7_우선

webddevys.tistory.com

 

  • C++의 STL에서 제공하는 priority_queue를 제공합니다.

 

3. 2개의 priority_queue 활용

  1. 문제를 풀이하기 위해 두 개의 priority_queue 컨테이너를 활용합니다. 먼저, 최소 값이 가장 높은 우선순위를 갖는 우선순위 큐(최소 힙)와 최대 값이 가장 높은 우선순위를 갖는 우선순위 큐(최대 힙)를 선언합니다.
  2. 먼저, 최소 힙과 최대 힙의 크기를 비교하며 그 균형을 유지합니다. 따라서, 입력 값을 우선적으로 최대 힙에 삽입하고, 최대 힙의 크기가 최소 힙의 크기보다 크면 입력 값을 최소 힙에 삽입합니다.
  3. 마지막으로, 외친 숫자가 짝수 개일 경우, 작은 수를 골라야 하기 때문에, 최소 힙과 최대 힙 사이즈를 비교하고 최대 힙이 더 클 경우, 최대 힙의 루트 값과 최소 힙의 루트 값을 교환해 줍니다.

 

#3. 코드
#include <iostream>
#include <queue>
using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);cin.tie(0);cout.tie(0);
    
    int N;
    cin >> N;
    
    // priority_queue를 활용해 최소 힙, 최대 힙 선언
    priority_queue<int, vector<int>, greater<int>> minHeap;
    priority_queue<int, vector<int>, less<int>> maxHeap;
    
    while(N--)
    {
        int tmp;
        cin >> tmp;
        
        if(maxHeap.size() > minHeap.size())
            minHeap.push(tmp);
        else
            maxHeap.push(tmp);
        
        if(!minHeap.empty() && maxHeap.top() > minHeap.top())
        {
            int minRoot = minHeap.top();
            int maxRoot = maxHeap.top();
            
            minHeap.pop();
            maxHeap.pop();
            
            minHeap.push(maxRoot);
            maxHeap.push(minRoot);
        }
        cout << maxHeap.top() << '\n';
    }
    
    return 0;
}

 

 

 

저작자표시 (새창열림)

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

[BOJ알고리즘, C++]#1927_최소 힙, 힙, 우선순위 큐  (1) 2023.11.23
[BOJ알고리즘, C++]#1158_요세푸스 문제, 선형 자료구조, 큐  (1) 2023.11.23
[BOJ알고리즘, C++]#3015_오아시스 재결합, 스택  (0) 2023.09.29
[BOJ알고리즘, C++]#1725_히스토그램, 스택  (2) 2023.09.25
[BOJ알고리즘, C++]#17299_오등큰수, 스택, unordered_map  (0) 2023.09.25
  1.  
  2. [BOJ알고리즘, C++]#1655_가운데를 말해요
'문제 풀이/BOJ 문제 풀이' 카테고리의 다른 글
  • [BOJ알고리즘, C++]#1927_최소 힙, 힙, 우선순위 큐
  • [BOJ알고리즘, C++]#1158_요세푸스 문제, 선형 자료구조, 큐
  • [BOJ알고리즘, C++]#3015_오아시스 재결합, 스택
  • [BOJ알고리즘, C++]#1725_히스토그램, 스택
Hardii2
Hardii2
Hardii2
개발 블로그
Hardii2
전체
오늘
어제
  • 분류 전체보기
    • 알고리즘
    • 웹 개발
      • Node.js
      • React
    • 게임개발
      • DirectX12
      • 관련 지식
      • Unreal C++
      • Unreal 블루프린트
    • 언어
      • Effective C++
      • Basic C++
      • 디자인 패턴
      • 자료구조
      • 기술 질문
    • 문제 풀이
      • BOJ 문제 풀이
      • Programmers 문제 풀이
      • geeksForgeeks 문제 풀이
    • 수학
      • 확률과 통계
      • 게임수학
    • 개인프로젝트
    • 그룹프로젝트
      • PM
      • Dev
    • Github

블로그 메뉴

  • 홈
  • 글쓰기

공지사항

인기 글

태그

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

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Hardii2
[BOJ알고리즘, C++]#1655_가운데를 말해요, 우선순위 큐, 최소 힙, 최대 힙
상단으로

티스토리툴바

개인정보

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

단축키

내 블로그

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

블로그 게시글

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

모든 영역

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

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