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

leejihun·2022년 11월 21일
0

알고리즘

목록 보기
43/50

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

#include <string>
#include <vector>
#include <algorithm>

using namespace std;

vector<int> solution(vector<string> operations)
{
    vector<int> answer;
    int iMax = 0;
    int iMin = 0;
    int iMaxIndex = -1;
    int iMinIndex = -1;
    int iIndexCount = -1;
    vector<int> vSave;

    for (int i = 0; i < operations.size(); i++)
    {
        string sTmp = operations[i].substr(0, 1);
        int iNum = stoi(operations[i].substr(2));



        if (sTmp == "I")
        {
            vSave.push_back(iNum);
            sort(vSave.begin(), vSave.end());
        }
        else if (sTmp == "D" && vSave.size() != 0)
        {
            if (iNum == 1)
            {
                vSave.erase(vSave.begin() + (vSave.size() - 1));
            }

            else if(iNum == -1)
            {
                vSave.erase(vSave.begin());
            }
        }

    }

    if (vSave.empty())
    {
        answer.push_back(0);
        answer.push_back(0);
    }
    else
    {
        answer.push_back(vSave.back());
        answer.push_back(vSave.front());
        
    }
    return answer;
}

vector를 이용해서 풀었다 sort를 사용하여 front에 최소값 back에 최대값이 들어가게끔 하였다.
set을 사용 하는게 더 좋아보인다.

substr만 쓸수 있다면 쉬운문제.

std::string a = "0123456789abcdefghij";

// count 가 npos 이므로 pos 부터 문자열 끝까지 리턴한다.
std::string sub1 = a.substr(10);
std::cout << sub1 << '\n';

// pos 와 pos + count 모두 문자열 범위 안이므로, 해당하는 부분 문자열을
// 리턴한다.
std::string sub2 = a.substr(5, 3);
std::cout << sub2 << '\n';

(출력)
abcdefghij
567

-참고 https://modoocode.com/235

profile
U+221E

0개의 댓글