[백준] 5430번 : AC

김개발·2021년 9월 23일
0

백준

목록 보기
24/75

문제 푼 날짜 : 2021-09-22

문제

문제 링크 : https://www.acmicpc.net/problem/5430

접근 및 풀이

구현하는 것은 크게 어렵지 않은 문제였다.
다만, 처음에는 입력으로 들어온 숫자들을 파싱한 후에 vector에 넣어줬다.
그리고 'R'명령어가 들어왔을 때 reverse함수를 이용하여 매 번 vector를 뒤집어줬는데, 이 부분에서 시간초과가 났던 것 같다.
앞, 뒤로 원소들을 push, pop해줄 수 있는 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;
}

결과

피드백

문제에 주어지는 입력 제한사항도 꼼꼼히 체크하자.

profile
개발을 잘하고 싶은 사람

0개의 댓글