반갑습니다!

[프로그래머스] 이중우선순위큐 본문

알고리즘 문제 풀이

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

김덜덜이 2020. 9. 2. 16:47
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr

풀이

우선순위큐를 사용하지 않고 리스트를 사용해서도 풀 수 있지 않을까 싶어서 시도해봤는데, 정답처리 되어버렸다...
문제에서 요구한대로 푼 것은 아니지만 풀이를 적어보자면, 숫자를 삽입할 때는 리스트에 삽입하고, 숫자를 삭제하는 연산을 하기 전에 리스트를 정렬해서 상황에 맞게 삭제해주면 된다. 혹시나 삭제 연산을 수행하지 않는 경우도 있을 수 있기 때문에 마지막으로 [최댓값, 최솟값]을 출력하기 전에 정렬을 한번 더 해주었다.

코드

#include <string>
#include <vector>
#include <list>
using namespace std;

vector<int> solution(vector<string> operations) {
    list<int> list;
    for (string str : operations) {
        if (str[0] == 'I') list.push_back(stoi(str.substr(2, str.length() - 2)));
        else {
            list.sort();
            if (list.empty()) continue;
            else if (str[2] == '1') list.pop_back();
            else list.pop_front();
        }
    }
    if (list.empty()) return { 0, 0 };
    list.sort();
    vector<int> answer = { list.back(), list.front() };
    return answer;
}