맛있는감귤

BOJ : 5430 AC 본문

알고리즘/백준 알고리즘

BOJ : 5430 AC

맛있는감귤 2017. 3. 3. 15:54

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

출처

ACM-ICPC > Regionals > Europe > Northwestern European Regional Contest > Benelux Algorithm Programming Contest > BAPC 2012 I번


덱(deque)을 이용하면 간단하게 해결할 수 있는 문제입니다.

R명령어가 들어왔을 때, pop하는 방향만 잘 잡아주면 되고

D명령어가 들어왔을 때, empty 인지 검사를 하고 error를 출력하면 됩니다.

입력받을 때 수열이 더럽게 주어져서 아래와 같이 무식한 방법으로 해결했는데

다른 분들 코드를 보니 getchar(), scanf("%d",X[i]); 의 반복으로 간단하게 입력 받을 수 있더군요. 

좋은거 배웠습니다.

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

int main(){
    int T;
    cin>>T;
    while(T--){
        int n,D_cnt=0;
        string p, X, num;
        deque<int> dq;
        int rev = 1;
        bool error = false;
        
        cin>>p>>n>>X;
        
        for(int i=0;i<X.size();i++){
            
            if(X.at(i)>='0' && X.at(i)<='9') num+=X.at(i);
            else {
                if( X.at(i)==',' || X.at(i)==']') dq.push_back(atoi(num.c_str()));
                num.clear();
            }
        }
        
        
        for(int i=0;i<p.size(); i++){
            if(p.at(i)=='R') rev*=-1;
            else if(p.at(i)=='D'){
                D_cnt++;
                if(dq.empty()) {
                    error = true;
                    break;
                }
                else {
                    if(rev == 1) dq.pop_front();
                    else dq.pop_back();
                }
            }
        }
        
        if(n==0) {
            if(D_cnt > 0)
                cout<<"error"<<"\n";
            else
                cout<<"[]"<<"\n";
            
            continue;
        }

        
        if (error) cout<<"error"<<"\n";
        else {
            cout<<"[";
            
            while(!dq.empty()){
                if(rev == 1) {
                    if(dq.size()==1) cout<<dq.front();
                    else cout<<dq.front()<<",";
                    dq.pop_front();
                }
                else {
                    if(dq.size()==1) cout<<dq.front();
                    else cout<<dq.back()<<",";
                    dq.pop_back();
                }
            }
            cout<<"]\n";
        }
    }
}


'알고리즘 > 백준 알고리즘' 카테고리의 다른 글

BOJ : 1193 분수찾기  (0) 2017.03.03
BOJ : 6603 로또  (0) 2017.03.03
BOJ : 12761 돌다리  (0) 2017.03.03
BOJ : 2146 다리 만들기  (0) 2017.03.03
BOJ : 9328 열쇠  (0) 2017.02.23