반응형
5430번: AC
각 테스트 케이스에 대해서, 입력으로 주어진 정수 배열에 함수를 수행한 결과를 출력한다. 만약, 에러가 발생한 경우에는 error를 출력한다.
www.acmicpc.net
풀이 )
배열에 있는 수를 앞 또는 뒤에서 뺄 수 있도록 하기 위해 deque에 넣었다.
처음 방향 dir을 true로 설정하고, 함수 R가 올 때마다 dir을 바꿔준다.
dir에 따라 함수 D가 올 때 true인 경우 앞에서 빼주고 (pop_front()), false인 경우 뒤에서 빼준다. (pop_back())
이 때, 현재 deque가 비어있는데 D가 나오는 경우 error를 출력하면서 다음 케이스를 실행한다.
함수를 수행한 결과 deque가 비어있는 경우 "[]"만 출력하고 다음 케이스를 실행하고,
비어있지 않은 경우 dir에 따라 앞, 뒤에서부터 출력한다.
#include <iostream>
#include <string>
#include <deque>
using namespace std;
int main(void){
int t;
cin >> t;
while(t--){
string func, s;
int n;
cin >> func;
cin >> n;
cin >> s;
deque<int> dq;
int len = s.length();
int tmp = 0;
for(int i = 1; i < len; ++i){
if(s[1] == ']')
break;
if(s[i] == ',' || s[i] == ']'){
dq.push_back(tmp);
tmp = 0;
}
else
tmp = tmp*10+s[i]-'0';
}
bool dir = true;
int func_len = func.length();
bool flag = 0;
for(int i = 0; i < func_len; ++i){
if(func[i] == 'R')
dir = !dir;
else{
n--;
if(dq.empty()){
cout << "error" << endl;
flag = true;
break;
}
if(dir)
dq.pop_front();
else
dq.pop_back();
}
}
if(flag)
continue;
if(n == 0){
cout << "[]" << endl;
continue;
}
if(dir){
for(int i = 0; i < n; ++i){
if(i == 0)
cout << '[';
cout << dq.front();
dq.pop_front();
if(i == n-1)
cout << ']' << endl;
else
cout << ',';
}
}
else{
for(int i = 0; i < n; ++i){
if(i == 0)
cout << '[';
cout << dq.back();
dq.pop_back();
if(i == n-1)
cout << ']' << endl;
else
cout << ',';
}
}
}
}
주의 )
각 경우에 대해서 조건을 간단하게 나타낼 수 있다. ex ) 5를 지나가는 경우 cur+prev == 10
이 때 4를 지나가는 경우 cur+prev == 8로 나타내는 경우 (2, 6)과 같은 예외가 있기 때문에 주의해야한다.
반응형
'문제풀이 > 백준' 카테고리의 다른 글
[C++] 백준 - 1874 : 스택 수열 (0) | 2020.12.01 |
---|---|
[C++] 백준 - 10773 : 제로 (0) | 2020.12.01 |
[C++] 백준 - 17300 : 패턴 (0) | 2020.11.29 |
[C++] 백준 - 1004 : 어린 왕자 (0) | 2020.11.29 |
[C++] 백준 - 1002 : 터렛 (0) | 2020.11.29 |