[C++] 백준 5430 : AC

Kim Nahyeong·2022년 1월 22일
0

백준

목록 보기
75/157

#include <iostream>
#include <string> // stoi
#include <deque>
using namespace std;

int T;
string p;
int n;
int main(int argc, char **argv){ // 덱
    scanf("%d",&T);

    for(int i=0; i<T; i++){
        string str;
        deque<int> dq;
        bool flag = true; // true면 정방향, false면 역방향
        bool error = false; // 에러 체크

        cin >> p; // 함수 입력받기
        scanf("%d",&n);
        cin >> str; // 정수 배열 입력받기

        string num = "";
        for(int j=0; j<str.length(); j++){
            if(isdigit(str[j])){ // 정수인지 판별
                num += str[j];
            } else {
                if(!num.empty()){ // 숫자가 존재할 때
                    dq.push_back(stoi(num)); // 숫자 int로 변경하여 dq에 넣기
                    num = ""; // 숫자 초기화
                }
            }
        }

        for(int j=0; j<p.length(); j++){
            if(p[j] == 'R'){
                flag = !flag; // 방향 바꾸기
            } else if(p[j] == 'D'){
                if(dq.size() > 0){
                    if(flag){ // 정방향
                        dq.pop_front();
                    } else { // 역방향
                        dq.pop_back();
                    }
                } else {
                    error = true;
                    break;
                }
            }
        }

        int dqsize = dq.size(); // dq size pop 하면 계속 변하기 때문에 변수에 저장

        if(error){
            printf("error\n");
        } else if(!error && dqsize == 0){
            printf("[]\n"); // 비어있는 경우에는 [] 출력
        } else {
            printf("[");
            if(flag){ // 정방향인 경우
                for(int j=0; j<dqsize; j++){
                    if(j == dqsize - 1){
                        printf("%d", dq.front());
                    } else {
                        printf("%d,", dq.front());
                    }
                    dq.pop_front();
                }
                
            } else { // 역방향인 경우
                for(int j=0; j<dqsize; j++){
                    if(j == dqsize - 1){
                        printf("%d", dq.back());
                    } else {
                        printf("%d,", dq.back());
                    }
                    dq.pop_back();
                }
            }
            printf("]\n");
        }
        
    }

    return 0;
}

숫자를 쉽게 입력받기 위해 인터넷 검색을 좀 이용하였다! 역시 모든 라이브러리는 존재한다.

  • stoi : string to int
  • isdigit : 숫자인지를 판별

덱에 대한 성질을 알면 쉽게 풀 수 있다.
앞과 뒤에서 모두 양방향으로 넣고 뺄 수 있다.

이제 점점 골드문제도 내 힘으로 풀 수 있는걸 보니 조금씩 실력이 향상되나보다. 그래프나 구현 문제는 슬슬 연습해야지

0개의 댓글