article thumbnail image
Published 2021. 10. 29. 17:43

문제 설명

문제 링크

http://icpc.me/5430

 

5430번: AC

각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.

www.acmicpc.net

풀이

덱을 이용하여 풀이 할 수 있다.

배열을 뒤집을 때, 진짜로 배열을 뒤집게 된다면 이때 시간복잡도가 O(n)이기 때문에 O(np)가 되어 터지게 된다.

그렇기 때문에 배열을 뒤집었는지 여부를 체크하여 수를 앞에서 버릴지 뒤에서 버릴지 정해야한다.

코드

#include <iostream>
#include <deque>
#include <algorithm>

using namespace std;

void solve() {
    deque<int> dq;
    string cmd; cin >> cmd;
    int n; cin >> n;
    string inp; cin >> inp;
    string num;
    for (const auto &c : inp) {
        if (c == '[' || c == ']') continue;
        if (c == ',') {
            dq.push_back(stoi(num));
            num.clear();
        } else {
            num.push_back(c);
        }
    }
    if (num.length()) dq.push_back(stoi(num));

    bool rev = false;
    for (const auto &c : cmd) {
        if (c == 'R') {
            rev = !rev;
        } else {
            if (!dq.size()) {
                cout << "error\n";
                return;
            }
            if (!rev) dq.pop_front();
            else dq.pop_back();
        }
    }
    cout << "[";
    if (rev && dq.size()) {
        for (int i = dq.size() - 1; i > 0; i--) cout << dq[i] << ",";
        cout << dq[0];
    }  else if (!rev && dq.size()) {
        for (int i = 0; i < dq.size() - 1; i++) cout << dq[i] << ",";
        if (dq.size()) cout << dq[dq.size() - 1];
    }
    cout << "]\n";
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    int t; cin >> t;
    while (t--) solve();
}

'Algorithm > BOJ' 카테고리의 다른 글

백준[1913] 달팽이  (0) 2021.11.02
백준[11003] 최솟값 찾기  (0) 2021.10.29
백준[16234] 인구 이동  (0) 2021.10.29
백준[1676] 팩토리얼 0의 개수  (0) 2021.10.28
백준[20208] 진우의 민트초코우유  (0) 2021.10.27
복사했습니다!