PS

BOJ 5430 : AC

lickelon 2024. 3. 23. 22:42
  • 문제 링크 : boj.kr/5430
  • 난이도 : G5
  • 태그 : 덱, 구현, 파싱
 

5430번: AC

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

www.acmicpc.net


코드

#include <bits/stdc++.h>

#define all(x) (x).begin(), (x).end()

#define INF 0x7FFFFFFF

using namespace std;

using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;

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

    int T;
    cin >> T;
    while(T--) {
        string s;
        cin >> s;
        int n;
        cin >> n;
        char c;
        cin >> c;
        deque<int> arr(n);
        for(int i = 0; i < n; i++) {
            cin >> arr[i];
            cin >> c;
        }
        if(n == 0) cin >> c;
        int r = 0;
        bool flag = false;
        for(auto u : s) {
            if(u == 'D') {
                if(arr.empty()) {
                    flag = true;
                    break;
                }
                if(r) arr.pop_back();
                else arr.pop_front();
            }
            else {
                r = !r;
            }
        }

        if(flag) {
            cout << "error\n";
            continue;
        }
        if(arr.size() == 0) {
            cout << "[]\n";
            continue;
        }
        cout << "[";
        if(r) {
            reverse(all(arr));
        }
        for(int i = 0; i < arr.size()-1; i++) {
            cout << arr[i] << ",";
        }
        cout << arr[arr.size()-1];
        cout << "]\n";
    }

    return 0;
}

풀이

덱을 이용하는 단순 구현 문제이지만 파싱과정에서 실수할 부분이 많다.

파싱을 실수할 것 같다면 한 줄을 그대로 받아놓고 대괄호를 제거한 뒤 ','를 기준으로 slice하는 방법도 있다.

'PS' 카테고리의 다른 글

BOJ 7775 : 최종 순위  (1) 2024.03.25
BOJ 15551 : if 3  (0) 2024.03.24
BOJ 7569 : 토마토  (0) 2024.03.22
BOJ 7576 : 토마토  (0) 2024.03.21
BOJ 30961 : 최솟값, 최댓값  (0) 2024.03.20