반응형

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

 

5430번: AC

문제 선영이는 주말에 할 일이 없어서 새로운 언어 AC를 만들었다. AC는 정수 배열에 연산을 하기 위해 만든 언어이다. 이 언어에는 두 가지 함수 R(뒤집기)과 D(버리기)가 있다. 함수 R은 배열에 있

www.acmicpc.net

 

>풀이

덱(deque)를 활용하는 문제입니다.

 

덱이란, 스택과 큐를 합친 개념을 가진 컨테이너라고 생각하시면 편할 것 같습니다. .pop_front와 .pop_back / .push_front와 .push_back 을 모두 지원합니다.

 

배열을 입력받는 것이 귀찮은데, 저는 '[' 등을 처리하기 위해 getchar() 를 썼는데, strtok를 쓰면 좀더 깔끔할 겁니다.

#include <cstdio>
#include <cstring>
#include <deque>
using namespace std;

int main(void) {
        int tc;
        
        scanf("%d", &tc);
        while (tc--) {
                char p[100001];
                int n, x, length;
                bool path = true;
                bool check = true;
                deque<int> dq;

                scanf("%s", p);
                scanf("%d", &n);
                getchar(), getchar();
                
                if (n) {
                        for (int i = 0; i < n - 1; i++) {
                                scanf("%d,", &x);
                                dq.push_back(x);
                        }
                        scanf("%d]", &x);
                        dq.push_back(x);
                }
                getchar();
                
                length = strlen(p);
                for (int i = 0; i < length; i++) {
                        switch (p[i]) {
                        case 'R' : 
                                path ^= true;
                                break;
                        case 'D' :
                                if (dq.empty()) {
                                        check = false;
                                        break;
                                } 
                                
                                if (path) dq.pop_front();
                                else dq.pop_back();
                                break;
                        }
                }

                if (!check) {
                        puts("error");
                        continue;
                }

                putchar('[');
                while (!dq.empty()) {
                        int n2;
                        
                        if (path) {
                                n2 = dq.front();
                                dq.pop_front();
                        }
                        else {
                                n2 = dq.back();
                                dq.pop_back();
                        }

                        printf("%d", n2);

                        if (dq.empty()) break;
                        else putchar(',');
                }
                printf("]\n");
        }
        return 0;
}

(개발 환경 : vs code)

반응형

+ Recent posts