#include <iostream>
using namespace std;
int main(void)
{
cin.tie(0);
cout.tie(0);
ios_base::sync_with_stdio(0);
int t;
cin >> t;
for(int tc = 0 ; tc < t; tc++)
{
int n, idx = 0, arr[100001]; // arr 은 정수 배열
char p[100001], temp; // p 는 입력받을 함수 문자열
cin >> p >> n >> temp; // 함수문자열 -> 배열갯수 -> '[' 까지 입력
for(int i = 0, data ; i < n ; i++)
{
cin >> arr[i] >> temp; // 정수 입력받아서 배열에 넣고 ',' 까지 입력받음
} // (마지막은 ',' 대신 ']')
if(n == 0) cin >> temp; // 0 일 경우는 ']' 닫는것 처리해줘야함
int from = 0, to = n - 1, size = n, dir = 1, able = 1; // from 이 시작점, to 가 끝점, dir 은 순방향/역방향
while(p[idx] != '\0')
{
if(p[idx] == 'R') // 만약 함수가 R 이라면
{
int temp = from;
from = to; // 시작점과 끝점을 바꿔줌 (정수배열을 뒤집기)
to = temp;
dir *= -1; // 뒤집어줬으니 방향도 반대방향이라고 표시해줌
}
else // 함수가 D 라면
{
if(size == 0)
{
able = 0; // 하나를 빼야되는데 사이즈가 0 이면 에러 처리
break;
}
from += dir; // 정상적일 경우는 하나 지워줌
size--;
}
idx++;
}
if(able) // 함수 모두 처리 후 정상처리의 경우
{
if(n == 0 || size == 0) // n 혹은 최종 사이즈가 0 이면 [] 만 출력
{
cout << "[]" << '\n';
}
else
{
cout << '[';
for(int i = from ; i != to ; i += dir) // 정수 배열 출력
{ // 단 from 과 to 의 인덱싱에 주의할 것
cout << arr[i]<< ',';
}
cout << arr[to] << ']' << '\n';
}
}
else cout << "error" << '\n'; // 비정상 처리는 에러 출력
}
}
[Approach]
1. 파이썬으로 풀면 쉽게 금방 풀 수 있을 것 같은데.. 벡터에도 뒤집어주는 함수가 있나? reverse?
-> 큐 사용해서 D 는 팝해주고, R은 두개씩 묶어서 없애준 뒤 구해주면 될 것 같다.
-> 배열의 인덱스만 조정해주는 방법이 더 편할듯
2. n 이 0일 때에 대한 처리가 조금 애매한데, 예시가 있으면 좋았을 것 같다
3. 런타임에러 3스택, 예외처리에 있어서 잔 실수가 좀 있는 듯
-> from 과 to 를 통해 반복돌리다보니 size 가 0이 된 경우에 터지게 된다.
[Point]
1. 덱을 쓰는 이유가 R 일 때 뒤집지 말고 앞이나 뒤에서 빼라는 거였구나.. 큐 써서 reverse 돌렸으면 큰일났을수도
[More]
1. 덱 사용해서 짜보기
'PS > BOJ' 카테고리의 다른 글
[백준] 18870.cpp : 좌표 압축 (0) | 2020.07.04 |
---|---|
[백준] 11279.cpp : 최대 힙 (0) | 2020.07.03 |
[백준] 1780.cpp : 종이의 개수 (0) | 2020.07.03 |
[백준] 1541.cpp : 잃어버린 괄호 (0) | 2020.07.03 |
[백준] 1260.cpp : DFS 와 BFS (0) | 2020.07.02 |