본문 바로가기
프로그래머스

[프로그래머스] level 3 - 이중우선순위큐

by 황인태(intaehwang) 2020. 2. 8.
반응형

https://programmers.co.kr/learn/courses/30/lessons/42628

 

코딩테스트 연습 - 이중우선순위큐 | 프로그래머스

 

programmers.co.kr

/* 문제의 해설에 앞서 내가 프로그래머스 문제를 푸는 나만의 기준에 대해 알리고자 한다. 백준은 온라인 강의 중급 2/3까지, 프로그래머스는 level 3까지의 문제를 해결하려고 노력하고 있다. 개인적인 생각으로는 프로그래머스 level 2까지는 백준 온라인 강의 초급보다 쉬운 거 같다. 그렇기 때문에 다음과 같은 순서로 코딩 문제를 풀고 있다.

  1. 프로그래머스 level 1, 2 문제 다 풀기기
  2. 백준 초급문제 풀기
  3. 백준 중급문제 풀기 풀다가 막히면
  4. 프로그래머스 level 3 문제 풀기
  5. 다시 백준 중급문제 풀기 (brute force, BFS, DFS, DP 위주로 풀기)
  6. 반복...

지금 3번의 상태에 있다.. 분할 정복 코딩이 날 힘들게 한다.. 그래서 프로그래머스 level 3 문제를 풀 예정이다. (참고로 level 3 스킬 체크를 했는데 80점 탈락을 했다ㅠㅠ) */

 본 문제는 프로그래머스의 이중우선순위 큐 문제다. 문제에 제시된 조건으로

  • 1. I (숫자) : 큐에 주어진 숫자를 삽입
  • 2. D 1 ; 큐에서 최댓값을 삭제
  • 3. D -1 : 큐에서 최솟값을 삭제

가 있다. 일단 정렬이 되어야하고, 최댓값, 최솟값을 삭제할 수 있어야 한다. 그렇기 때문에 문제에서는 vector를 이용하여 문제를 해결할 수 있다.

  1. (조건 1) 일경우 vector에 저장
  2. (조건 2, 3) 일 경우 vector가 공백인지 확인 후 처리

문제에 입력은 string으로 들어오기 때문에 문자열을 잘해야 한다.

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
39
40
41
42
43
44
45
#include <string>
#include <vector>
#include <algorithm>
 
using namespace std;
 
vector<int> solution(vector<string> oper) {
    vector<int> answer;
    for (int i = 0; i < oper.size(); i++) {
        if (oper[i][0== 'I') {
            string s = "";
            for (int j = 2; j < oper[i].size(); j++) {
                s += oper[i][j];
            }
            answer.push_back(stoi(s));
        }
        else {
            if (answer.size() == 0continue;
            if (oper[i][2== '-') {
                sort(answer.rbegin(), answer.rend());
                answer.pop_back();
            }
            else {
                sort(answer.begin(), answer.end());
                answer.pop_back();
            }
        }
    }
    sort(answer.begin(), answer.end());
    vector<int> ans;
    int sizes = answer.size();
    if (sizes == 0) {
        ans.push_back(0);
        ans.push_back(0);
    }
    else if (sizes == 1) {
        ans.push_back(answer[0]);
        ans.push_back(answer[0]);
    }
    else {
        ans.push_back(answer[answer.size()-1]);
        ans.push_back(answer[0]);    
    }
    return ans;
}
cs
반응형
Buy me a coffeeBuy me a coffee

댓글