[백준] 5430번

Jeanine·2022년 3월 8일
0

baekjoon

목록 보기
12/120
post-thumbnail

💻 C++ 기반

https://www.acmicpc.net/problem/5430

  • string find 함수를 사용할 때 두 번째 인자부터 탐색 시작
size_type find(const basic_string& str, size_type pos = 0) const;
  • string substr 함수를 사용할 때 원래 문자열에서 [pos, pos + count) 까지의 문자열을 반환
#include <iostream>
#include <string>
#include <deque>
#include <queue>

using namespace std;

int main()
{
    int T;
    cin >> T;

    while (T--)
    {
        string p;
        cin >> p;

        int n;
        cin >> n;

        string str;
        cin >> str;

        deque<int> dq;

        if (str.length() != 2)
        {
            int idx = 0;
            int start = 1;
            for (int i = 1; i < n; i++)
            {
                idx = str.find(',', start);
                dq.push_back(stoi(str.substr(start, idx - start)));
                start = idx + 1;
            }
            idx = str.find(']', start);
            dq.push_back(stoi(str.substr(start, idx - start)));
        }

        bool reverse = false;
        bool flag = true;
        queue<int> ans;
        for (int i = 0; i < p.length(); i++)
        {
            if (p[i] == 'R')
            {
                reverse = reverse ? false : true;
            }
            else if (p[i] == 'D')
            {
                if (dq.empty())
                {
                    printf("error\n");
                    flag = false;
                    break;
                }
                else
                {
                    if (reverse)
                    {
                        dq.pop_back();
                    }
                    else
                    {
                        dq.pop_front();
                    }
                }
            }
        }

        if (flag)
        {
            if (dq.empty())
            {
                printf("[]\n");
            }
            else
            {
                printf("[");
                while (dq.size() != 1)
                {
                    if (reverse)
                    {
                        printf("%d,", dq.back());
                        dq.pop_back();
                    }
                    else
                    {
                        printf("%d,", dq.front());
                        dq.pop_front();
                    }
                }
                printf("%d]\n", dq[0]);
                dq.pop_front();
            }
        }
    }
}
profile
Grow up everyday

0개의 댓글