Programmers42628

이중우선순위 큐

Posted by Damin on January 23, 2020

이중 우선 순위 큐

문제 링크

  • 최대 최소를 빼 줘야 한다.
  • 어떤 경우에는 최댓값을 빼주고, 어떤 경우에는 최솟값을 빼준다.
  • 최대 최소를 빼주고 넣어주고 해야 앞 뒤를 공략하기 위한 deque을 이용하자!

    단, 계속 오름차순으로 sort 시켜주자!

1
2
3
4
5
6
7
8
9
10
11
1.	Operation 순회
  A.	만약 I 라면
    i.	String to int 로 바꿔 준 뒤에 deque에 push
    ii.	Sort
  B.	만약 d라면
    i.	1이라면
      1.	최댓값을 삭제해줘야 하니 맨 뒤에 값 pop
    ii.	-1 이라면
      1.	최솟값을 삭제해줘야 하니 맨 앞에 값 pop
      2.	만약 deque가 비었다면 0,0 리턴
      3.	아니라면 최대 최소 리턴

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <string>
#include <vector>
#include <deque>
#include<algorithm>
using namespace std;

vector<int> solution(vector<string> o) {
	vector<int> answer;
	deque<int> d;
	for (int i = 0; i < o.size(); i++) {
		if (o[i][0] == 'I') {
			string sub = o[i].substr(2, o[i].length());
			int temp = atoi(sub.c_str());
			d.push_back(temp);
			sort(d.begin(), d.end());
		}
		else {
			if (d.empty()) {
				continue;
			}
			if (o[i][2] == '1') {
				d.pop_back();
			}
			else {
				d.pop_front();
			}
		}
	}
	if (d.empty()) {
		answer.push_back(0);
		answer.push_back(0);
	}
	else {
		answer.push_back(d.back());
		answer.push_back(d.front());
	}
	return answer;
}