본문 바로가기

Algorithm/Implementation

(C++) - 백준(BOJ) 5430번 : AC 답

반응형

www.acmicpc.net/problem/5430

 

5430번: AC

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

www.acmicpc.net

deque 자료구조를 사용해 푸는 문제였습니다.

 

풀이방법

 1. 문자열로 부터 수를 적절히 parsing하여 deque에 저장 

 2. R이 짝수만큼 입력이라면 이후에 D가 나올 경우 좌측부터 우측순으로 지워지게 됨. 반대의 경우에는 우측에서 좌측순으로 지워짐. 그 방식으로 D가 나올때마다 순서에 맞게 지워나감. 지울 때 이미 deque의 size가 0이라면 error출력

 3. D를 모두 수행했을 때 원소가 없으면 빈 배열인 []를 출력.

 

Code

#include <iostream>
#include <string>
#include <deque>
using namespace std;
int testCase;
deque <int> dq;
int main(){
    
    cin >> testCase;

    while(testCase--){
        int flag = 0;
        int rCount = 0;
        int arrayLength;
        string arrayString;
        string operation;
        cin >> operation >> arrayLength >> arrayString;
        for(int i = 1; i < arrayString.size(); i++){
            string num = "";
            while(arrayString[i]!=',' && arrayString[i]!=']') num += arrayString[i++];
            if(num!="") dq.push_back(stoi(num));
        }
        for(int i = 0; i < operation.size(); i++){
            if(operation[i] == 'R') rCount++;
            else {
                if(dq.size()==0) {
                    flag = 1;
                    cout << "error";
                    break;
                }
                if(rCount % 2 == 0) dq.pop_front();
                else dq.pop_back();
            }
        }

        int cnt = 0;
        int size = dq.size();
        
        while(dq.size()){
            if(cnt==0) cout << "[";

            if(rCount % 2 == 0){
                cout << dq.front();
                dq.pop_front();
            }

            else{
                cout << dq.back();
                dq.pop_back();
            }
            if(cnt==size-1) cout << "]";
            else cout << ','; 
            cnt++;
        }
        if(flag==0 && size==0) cout << "[]";
        cout << '\n';
    }
}