관리 메뉴

풀이 보관함

[C++] 백준 5430번: AC 본문

problem solving/백준

[C++] 백준 5430번: AC

viin 2022. 7. 1. 19:42

문제 

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

 

풀이

 

input output
1
R
1
[1]
[1]
1
D
1
[1]
[]
1
DDDD
4
[1,2,3,4]
[]
1
R
0
[]
[]

위 반례도 잘 돌아가는지 꼭 체크하기!

 

 

소스

#include <iostream>
#include <string>
#include <deque>
 
bool list_parser(const std::string& in, std::deque<std::string>& out)
{
    if(in.length() == 0)
        return false;
    
    int cur = 1;
    int idx = 0;
    for(int i = 1; i<in.length(); ++i)
    {
        if(in[i]==',' || in[i] ==']'
        {
            std::string element(in.begin() + cur, in.begin() + i);
            if(element.length() == 0return false;
            out.push_back(element);
            //std::cout << "[TEST] " <<  element << std::endl;
            cur = i+1;
        }
    }
    
    return true;
}
 
int main()
{
    int T = 0std::cin >> T;
    while(T--)
    {
        std::string operation, x;
        std::deque<std::string> dp;
        int n;
        std::cin >> operation >> n >> x;
 
        list_parser(x, dp);
        
        bool reversed = false;
        bool error = false;
        
        for(const auto& op : operation)
        {
            if(op == 'R')
            {
                reversed = !reversed;
            }
            else if(op == 'D')
            {
                if(dp.empty())
                {        
                    error = true;
                    break;
                }
                
                if(reversed)
                    dp.pop_back();
                else
                    dp.pop_front();
            }
        }
        
        //output
        
        if(error)
            std::cout << "error\n";
        else
        {
            std::cout << "[";
            
            if(reversed)
            {
                for(auto i = dp.rbegin(); i!=dp.rend(); ++i)
                {
                    if(i == dp.rend() - 1std::cout <<*i;
                    else std::cout << *+ ',';
                }
            }
            else
            {
                for(auto i = dp.begin(); i!=dp.end(); ++i)
                {
                    if(i == dp.end() - 1std::cout <<*i;
                    else std::cout << *+ ',';
                }
 
            }
            std::cout << "]\n";
        }
 
    }
    
    
    return 0;
}
cs