백준 5430번 : AC / C++

2023. 3. 1. 00:44개인공부/코딩테스트

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

 

5430번: AC

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

www.acmicpc.net

처음에 체점단계에서는 런타임 오류가 발생했는데 dq가 빈상태에서 iterator가 접근을 해서 오류가 발생하였다. 전반적으로 문자열을 친절하게 주지않아서 귀찮은 문제이다...

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
#include<iostream>
#include<deque>
#include<string>
 
using namespace std;
 
 
 
int main(void)
{
    cin.tie(NULL);
    cout.tie(NULL);
    ios::sync_with_stdio(false);
    int TestCase;
    cin >> TestCase;
 
    for (int t = 0; t < TestCase; ++t)
    {
        deque<int> dq;
        string function;
        bool foward = true, IsError = false;
        cin >> function;
        int n;
        cin >> n;
        string str;
        cin >> str;
        string data{};
        for (int i = 1; i < str.size(); ++i)
        {
            if (str[i] == ',' || str[i] == ']')
            {
                if (data != "")
                    dq.push_back(stoi(data));
                data = "";
            }
            else
            {
                data += str[i];
            }
        }
 
        for (int i = 0; i < function.size(); ++i)
        {
            if (function[i] == 'R')
                foward = !foward;
            else // D
            {
                if (dq.empty())
                {
                    cout << "error" << '\n';
                    IsError = true;
                    break;
                }
                else if (foward == true)
                    dq.pop_front();
                else
                    dq.pop_back();
            }
        }
        if (IsError == false)
        {
            cout << '[';
            if (dq.empty())
            {
                cout << ']' << '\n';
                continue;
            }
 
            if (foward == true)
            {
                auto iter = dq.begin();
                while (true)
                {
                    if (iter != --dq.end())
                    {
                        cout << *iter << ',';
                        ++iter;
                    }
                    else
                    {
                        cout << *iter << ']' << '\n';
                        break;
                    }
                }
            }
            else
            {
                auto iter = --dq.end();
                while (true)
                {
                    if (iter != dq.begin())
                    {
                        cout << *iter << ',';
                        --iter;
                    }
                    else
                    {
                        cout << *iter << ']' << '\n';
                        break;
                    }
                }
            }
 
        }
    
    }
 
    return 0;
}
 
cs