[백준] 5430 - AC

2024. 8. 11. 11:44PS/백준

728x90

문제 링크

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

느낀 점

1. 문자열은 왠만하면 문자열로 처리하는 게 좋다.

2. 크기가 큰 문자열을 함수의 인자로 받을 때, 참조 변수를 이용하면 메모리 낭비를 줄일 수 있다.

3. rbegin, rend를 이용하면 순회를 더 깔끔하게 할 수 있다.

#include <iostream>
#include <deque>
#include <string>
#include <algorithm>
using namespace std;

deque<string> nList;
void divide(const string& str){
    nList.clear();
    string temp = "";
    for (auto ch: str)
    {
        if (ch == '[')
        {
            continue;
        } else if (ch == ',' or ch == ']')
        {
            if (!temp.empty())
            {
                nList.push_back(temp);
                temp = "";
            }
        } else
        {
            temp += ch;
        }
    }
}

void print(bool reverseFlag){
    cout << '[';
    if (reverseFlag)
    {
        for (auto i = nList.rbegin(); i != nList.rend(); i++)
        {
            if (i != nList.rend() - 1)
            {
                cout << *i << ',';
            } else
            {
                cout << *i;
            }
            
        }
    } else
    {
        for (auto i = nList.begin(); i != nList.end(); i++)
        {
            if (i != nList.end() - 1)
            {
                cout << *i << ',';
            } else
            {
                cout << *i;
            }
        }
    }
    cout << ']' << '\n';
}

int main(){
    int n, T;
    cin >> T;
    for (size_t i = 0; i < T; i++)
    {
        bool reverseFlag = false;
        bool errorFlag = false;
        string p, nString;
        string answer = "[";
        cin >> p >> n >> nString;
        divide(nString);
        for (size_t i = 0; i < p.size(); i++)
        {
            if (p[i] == 'R')
            {
                reverseFlag = !reverseFlag;
            } else if (p[i] == 'D')
            {
                if (nList.empty())
                {
                    cout << "error" << "\n";
                    errorFlag = !errorFlag;
                    break;
                }
                if (!reverseFlag)
                {
                    nList.pop_front();
                } else
                {
                    nList.pop_back();
                }
            }
        }
        if (!errorFlag)
        {
            print(reverseFlag);
        }
    }
    return 0;
}

'PS > 백준' 카테고리의 다른 글

[백준] 14567 - 선수과목  (0) 2024.08.16
[백준] 11663 - 선분 위의 점  (0) 2024.07.04
[백준] 7795 - 먹을 것인가 먹힐 것인가  (0) 2024.07.01
[백준] 4963 - 섬의 개수  (0) 2024.06.26
[백준] 2644 - 촌수계산  (0) 2024.06.26