정화 코딩

[C++] AC (백준 5430번) 본문

PS

[C++] AC (백준 5430번)

jungh150c 2024. 7. 4. 04:45

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

 

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

int main() {
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    int tn;
    cin >> tn;
    
    while(tn--) {
        string func;
        cin >> func;

        int n;
        cin >> n;

        string str;
        cin >> str;

        string tmp;
        deque<int> deq;
        for (char c: str) {
            if (c == '[') {
                continue;
            } else if (c == ',' || c == ']') {
                if (tmp != "") deq.push_back(stoi(tmp));
                tmp = "";
            } else {
                tmp = tmp + c;
            }
        }

        bool reverse = false;
        bool isError = false;

        for (char c: func) {
            if (c == 'R') {
                if (reverse) reverse = false;
                else reverse = true;
            } else if (c == 'D') {
                if (deq.empty()) {
                    isError = true;
                    break;
                }
                if (reverse) deq.pop_back();
                else deq.pop_front();
            }
        }

        if (isError) {
            cout << "error\n";
        } else {
            cout << "[";
            if (deq.empty()) {
                cout << "]\n";
            } else {
                if (reverse) {
                    while (deq.size() > 1) {
                        cout << deq.back() << ",";
                        deq.pop_back();
                    }
                    cout << deq.back() << "]\n";
                } else {
                    while (deq.size() > 1) {
                        cout << deq.front() << ",";
                        deq.pop_front();
                    }
                    cout << deq.front() << "]\n";
                }
            }
        }
    }
}

덱을 전부 뒤집기에는 시간이 너무 아까우니 덱의 앞을 앞으로 볼 것인지 덱의 뒤를 앞으로 볼 것인지를 저장하는 변수 reverse를 사용하여 해결하였다. 근데 테스트 케이스가 여러개인데 코드 중간에 return 0;을 하는 실수를 해서 좀 시간을 버렸다.. ㅎㅎ (정답)

 

Comments