PS

프로그래머스 - 이중 우선순위 큐

728x90

programmers.co.kr/learn/courses/30/lessons/42628#

 

코딩테스트 연습 - 이중우선순위큐

 

programmers.co.kr

 

최소 최대를 지울 수 있는 이중 우선순위 큐를 만드는 문제로

최소힙, 최대힙 두개를 만들어서 처리하거나,

multiset 을 이용하여 처리할 수 있다.

(multiset 을 사용한 이유는

1. 앞뒤 양방향에서 접근 할 수 있어야하며,

2. 삽입, 삭제와 동시에 정렬되어야 하기 때문이다.

이런 자료구조를 갖는 것은 red-black tree 기반의 multiset STL 을 사용해야 처리된다)

 

- c++

 

#include <bits/stdc++.h>
 
using namespace std;
 
vector<int> solution(vector<string> operations) {
    vector<int> answer;
    multiset<int> ms;
    for (int i = 0; i < operations.size(); ++i) {
        string temp = operations[i];
        char order = temp[0];
        int num = stoi(temp.substr(2, temp.length() - 2));
        
        if (order == 'I') {
            ms.insert(num);
        } else {
            if (!ms.empty()) {
                if (num == 1) {
                    auto iter = ms.end();
                    --iter;
                    ms.erase(iter);
                } else {
                    auto iter = ms.begin();
                    ms.erase(iter);
                }   
            }
        }
        
    }
    
    answer.resize(20);
    if (!ms.empty()) {
        auto iter = ms.begin();
        answer[1= *iter;
        iter = ms.end();
        --iter;
        answer[0= *iter;
    }
 
    return answer;
}
cs

 

 

 

 

 

* 이 문제는 백준 7662 이중 우선순위 큐 와 똑같은 문제이다.

www.acmicpc.net/problem/7662

 

7662번: 이중 우선순위 큐

입력 데이터는 표준입력을 사용한다. 입력은 T개의 테스트 데이터로 구성된다. 입력의 첫 번째 줄에는 입력 데이터의 수를 나타내는 정수 T가 주어진다. 각 테스트 데이터의 첫째 줄에는 Q에 적

www.acmicpc.net

 

728x90

'PS' 카테고리의 다른 글

프로그래머스 - H-Index  (0) 2020.11.24
프로그래머스 - 가장 큰 수  (0) 2020.11.24
프로그래머스 - 더 맵게  (0) 2020.11.23
SWEA 2819 - 격자판의 숫자 이어 붙이기  (0) 2020.11.21
SWEA 1206 - View  (0) 2020.11.21