[백준/BOJ] 백준 5430번 : AC
2020. 8. 29. 01:58ㆍ알고리즘 문제풀이
https://www.acmicpc.net/problem/5430
deque에 숫자들을 저장하고, bool front_check을 만들어 함수가 R이면 front_check를 바꿔준다. 그리고 front_check가 true이면 함수가 D일 때 앞의 숫자를 빼고, false이면 함수가 D일 때 뒤의 숫자를 뺀다. 결과를 출력할 때 front_check가 true이면 dq의 앞의 숫자부터 출력하고 false이면 뒤의 숫자부터 출력한다.
코드
#include <iostream>
#include <algorithm>
#include <deque>
#include <string>
using namespace std;
int main()
{
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int tc;
string p;
int n;
string input;
deque<int> dq;
cin >> tc;
for (int t = 0; t < tc; t++)
{
dq.clear();
cin >> p;
cin >> n;
cin >> input;
//숫자들을 분리해서 dq에 저장한다
string temp = "";
for (int i = 0; i < input.size(); i++)
{
if (input[i] >= '0' && input[i] <= '9')
{
temp += input[i];
}
else
{
if (temp.size() != 0)
{
dq.push_back(stoi(temp));
temp = "";
}
else
temp = "";
}
}
//R이면 front_check를 바꿔준다
//front_check가 true이면 D일때 앞에 숫자를 빼고, false이면 D일때 뒤의 숫자를 뺀다
bool front_check = true;
bool error_check = false;
for (int i = 0; i < p.size(); i++)
{
if (p[i] == 'R')
{
if (front_check)
front_check = false;
else
front_check = true;
}
else if (p[i] == 'D')
{
if (dq.empty()) //dq가 비어 있을때
{
cout << "error" << "\n";
error_check = true;
break;
}
if (front_check)
dq.pop_front();
else
dq.pop_back();
}
}
if (error_check)
continue;
//front_check가 true이면 dq의 앞의 숫자부터 출력하고 false이면 뒤의 숫자부터 출력한다
if (front_check)
{
cout << "[";
while (!dq.empty())
{
cout << dq.front();
dq.pop_front();
if (!dq.empty())
cout << ",";
}
cout << "]";
cout << "\n";
}
else
{
cout << "[";
while (!dq.empty())
{
cout << dq.back();
dq.pop_back();
if (!dq.empty())
cout << ",";
}
cout << "]";
cout << "\n";
}
}
return 0;
}
'알고리즘 문제풀이' 카테고리의 다른 글
[백준/BOJ] 백준 12100번 : 2048 (Easy) (0) | 2020.09.08 |
---|---|
[백준/BOJ] 백준 1520번 : 내리막 길 (0) | 2020.08.29 |
[백준/BOJ] 백준 1021번 : 회전하는 큐 (0) | 2020.08.28 |
[백준/BOJ] 백준 10866번 : 덱 (0) | 2020.08.28 |
[백준/BOJ] 백준 2164번 : 카드2 (0) | 2020.08.28 |