코딩하기 좋은날
백준 5430 AC 본문
반응형
문제와 채점은 위 사이트에서 확인 하실 수 있습니다
이 문제는 배열과 R, D 명령을 입력받고 각 명령에 맞게 배열을 변경한후 출력하는 문제입니다.
우선 기본적으로 deque를 사용하여서 풀었고, 배열의 입력은 stringstream을 이용해서 받았습니다.
주의할 점은 R이 나왔을 때 배열을 뒤집으면 시간초과가 나게 됩니다. 배열을 뒤집는게 아니라 덱의 뒷부분에서 원소를 빼는 상황으로 바뀐다고 생각하면
flag를 하나 주어서 현재 상태를 체크해주며 앞,뒤에서 빼주고 배열을 완성한후 출력하면 해결이 됩니다.
다음은 코드입니다.
#include <iostream>
#include <deque>
#include <string>
#include <sstream>
using namespace std;
int main(void) {
ios_base::sync_with_stdio(false); cin.tie(NULL);
int T;
cin >> T;
deque<int> dq;
bool flag;
bool rflag;
while(T--) {
stringstream ss;
dq.clear();
flag = true;
rflag = false;
string str;
cin >> str;
int x; cin >> x;
string str2;
cin >> str2;
ss.str(str2);
char a;
while(ss>>a) { //문자를 읽을 수 있을 떄 까지
int x;
if(ss>>x) //숫자 하나를 읽을수 있다면 읽어들임
dq.push_back(x);
}
int len = str.size();
for(int i = 0; i < len; i++) {
if(str[i] == 'R') {
rflag = !rflag;
}
else if(str[i] == 'D') {
if(dq.empty()) {
flag = false;
break;
}
if(rflag) // rflag 조건에 따라 앞이나 뒤의 원소 제거
dq.pop_back();
else
dq.pop_front();
}
}
if(rflag) {
deque<int> dqc;
while(dq.size() > 1) {
dqc.push_back(dq.front());
dq.pop_front();
}
while(!dqc.empty()) {
dq.push_back(dqc.back());
dqc.pop_back();
}
}
if(flag) {
cout<<'[';
for(int i = 0; i < dq.size(); i++) {
if(i == dq.size()-1)
cout<<dq[i];
else
cout<<dq[i]<<',';
}
cout<<']'<<'\n';
}
else
cout<<"error"<<'\n';
}
return 0;
}
반응형
'백준(Baekjoon) 문제' 카테고리의 다른 글
백준 1003 피보나치 함수 (0) | 2019.02.21 |
---|---|
백준 1021회전하는 큐 (0) | 2019.02.19 |
백준 1916 최소비용 구하기 (0) | 2019.02.18 |
백준 16568 엔비스카의 영혼 (0) | 2019.02.18 |
백준 1197 최소스패닝 트리 (프림, 크루스칼) (0) | 2019.02.17 |