[백준/C++] 5430번 AC

2021. 3. 22. 19:16알고리즘/구현

728x90
반응형

문제: www.acmicpc.net/problem/5430

 

5430번: AC

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

www.acmicpc.net

 

 

문제풀이

 

입력되는 함수 R에 대하여 실제로 벡터 순서를 뒤집게 된다면 시간초과가 나온다.

 

때문에 덱을 이용하여 R이 현재까지 짝수번 입력되었다면 앞에서 함수 D(pop_front)를 실행하고

홀수번 입력되었다면 뒤에서 함수 D(pop_back)를 실행한다.

 

 

코드

#include <iostream>
#include <deque>

using namespace std;

int main(){
    ios::sync_with_stdio(false); cin.tie(nullptr);

    int T; //테스트 케이스
    cin>>T;

    string p;
    int n;
    string nums;
    deque<string> d;
    while(T--){
        cin>>p>>n>>nums;

        string tmp; //두자리수 이상 숫자 저장
        for(int i=1; i<nums.size(); i++){
            if(nums[i] == ',' || nums[i] == ']'){
                if(!tmp.empty()){
                    d.push_back(tmp);
                    tmp.clear();
                }
            }
            else{
                tmp += nums[i];
            }
        }

        bool flagR = true; //true면 안뒤집힌거
        bool flagError = false; //에러처리
        for(int i=0; i<p.size(); i++){
            if(p[i] == 'R'){
                flagR = !flagR;
            }
            else{ //p[i] == 'D'
                if(d.empty()){ //함수 D를 실행해야하는데 덱이 비어있다면 error
                    cout<<"error\n";
                    flagError = true;
                    break;
                }
                else{
                    if(flagR){
                        d.pop_front();
                    }
                    else{
                        d.pop_back();
                    }
                }
            }        
        }

        if(flagError){ //error면 출력하지 않고 continue
            d.clear();
            continue;
        }

        cout<<"[";

        if(flagR){ //뒤집힌 여부에 따라 앞부터 or 뒤부터 출력
            while(!d.empty()){
                cout<<d.front();
                d.pop_front();

                if(!d.empty())
                    cout<<",";
            }
        }
        else{
            while(!d.empty()){
                cout<<d.back();
                d.pop_back();

                if(!d.empty())
                    cout<<",";
            }            
        }

        cout<<"]\n";
    }

    return 0;
}

 

 

결과

728x90
반응형

'알고리즘 > 구현' 카테고리의 다른 글

[백준/C++] 10799번 쇠막대기  (0) 2021.03.23
[백준/C++] 2504번 괄호의 값  (0) 2021.03.23
[백준/C++] 18258번 큐 2  (0) 2021.03.21
[백준/C++] 1021번 회전하는 큐  (0) 2021.03.21
[백준/C++] 2493번 탑  (0) 2021.03.20