[伯俊]5430号:AC


回答日:2021-09-22

質問する


質問リンク:https://www.acmicpc.net/problem/5430

アクセスと解析


体現はあまり難しくない問題だ.
ただし、最初に入力した数字をグループ化し、ベクトルに入れます.
そして、「R」命令が入ると、reverse関数を使用してベクトルが反転するたびに、この部分がタイムアウトしたようです.
要素を前方、後方、ポップアップできるdequeを用いて問題を解決した.

コード(タイムアウト)

// 백준 5430번 : AC
#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main() {
    int T, n;
    string p, arr;
    vector<int> v;

    cin >> T;

    while (T--) {
        cin >> p >> n >> arr;

        string tmp = "";
        for (int i = 0; i < arr.length(); i++) {
            char ch = arr[i];

            if (isdigit(ch)) {
                tmp += ch;
            } else {
                if (tmp.length() != 0) {
                    v.push_back(stoi(tmp));
                    tmp = "";
                }
            }
        }

        bool errFlag = false;
        for (char ch : p) {
            if (ch == 'R') {
                reverse(v.begin(), v.end());
            } else if (ch == 'D') {
                if (!v.empty()) {
                    v.erase(v.begin());
                } else {
                    cout << "error" << '\n';
                    errFlag = true;
                    break;
                }
            }
        }
        if (!errFlag) {
            cout << "[";
            for (int i = 0; i < v.size(); i++) {
                if (i != v.size() - 1) {
                    cout << v[i] << ",";
                } else {
                    cout << v[i];
                }
            }
            cout << "]\n";
        }
        v.clear();
    }
    return 0;
}

コード(通過)

// 백준 5430번 : AC
#include <iostream>
#include <deque>
#include <algorithm>

using namespace std;

int main() {
    int T, n;
    string p, arr;

    cin >> T;

    while (T--) {
        cin >> p >> n >> arr;
        deque<int> dq;
        bool reversed = false;

        string tmp = "";
        for (int i = 0; i < arr.length(); i++) {
            char ch = arr[i];

            if (isdigit(ch)) {
                tmp += ch;
            } else {
                if (tmp.length() != 0) {
                    dq.push_back(stoi(tmp));
                    tmp = "";
                }
            }
        }

        bool errFlag = false;
        for (char ch : p) {
            if (ch == 'R') {
                reversed = !reversed;
            } else if (ch == 'D') {
                if (!dq.empty()) {
                    if (reversed) {
                        dq.pop_back();
                    } else {
                        dq.pop_front();
                    }
                } else {
                    cout << "error" << '\n';
                    errFlag = true;
                    break;
                }
            }
        }
        if (!errFlag) {
            cout << "[";
            if (dq.size() > 0) {
                if (reversed) {
                    while (dq.size() > 1) {
                        cout << dq.back() << ",";
                        dq.pop_back();
                    }
                    cout << dq.back();
                } else {
                    while (dq.size() > 1) {
                        cout << dq.front() << ",";
                        dq.pop_front();
                    }
                    cout << dq.front();
                }
            }
            cout << "]\n";
        }
    }
    return 0;
}

結果



フィードバック


問題の入力制限事項もよくチェックしてください.