링크 : www.acmicpc.net/problem/5430
이 문제는 어렵다기보단 번거로운 점이 많아 귀찮다.
만약 문제를 적당히 읽고 대충 풀어냈다면, 50%를 넘겨서 에러가 나거나 런타임 에러가 나올수 있다.
문제풀이는 다음과 같다.
1. Reverse의 경우, 정말 하나하나 순서를 바꿔주지 말자.
2. Reverse가 되었고 그 다음 순서가 D(빼기)라면 맨 뒤에서 부터 빼면 된다.
3. 고로 문제는 Deque를 잘 활용하기만 하면 된다.
하지만 문제를 대충 읽었다가는 간과한 점들이 많아 오류가 나기 쉽다.
만약 50%를 넘겨서 에러가 나거나 런타임 에러가 발생했경우, 질문 게시판에서
다른 사람들이 올린 테스트 케이스를 통해 무엇이 틀렸는지를 알아가길 권장한다.
#include <iostream>
#include <deque>
#include <vector>
#include <algorithm>
#include <string>
using namespace std;
int main() {
ios::sync_with_stdio(NULL);
cin.tie(NULL);
int test;
cin >> test;
while (test > 0) {
string s1 = "", s2 = "", stemp ="";
int num = 0, temp = 0, temp2 = 0;
bool ch = false, end = false;
deque<int>q;
cin >> s1;
cin >> num;
cin >> s2;
for (int i = 0; i < s2.size(); i++) {
if (s2[i] >= '0' && s2[i] <= '9') temp2 = (temp2 * 10) + (s2[i] - 48);
else{
if (temp2 != 0) {
q.push_front(temp2);
temp2 = 0;
}
}
}
for (int i = 0; i < s1.size(); i++) {
if (q.empty()&&s1[i]=='D') {
end = true;
break;
}
else {
if (s1[i] == 'R') ch = !ch; //ch가 true면 reverse상태
else if(s1[i]=='D') {
if (ch) q.pop_front();
else q.pop_back();
}
}
}
if (!q.empty()) {
cout << "[";
if (ch) {
while (!q.empty()) {
if (q.size() == 1) cout << q.front() << "]" << "\n";
else cout << q.front() << ',';
q.pop_front();
}
}
else {
while (!q.empty()) {
if (q.size() == 1) cout << q.back() << "]" << "\n";
else cout << q.back() << ',';
q.pop_back();
}
}
}
else {
if (!end)cout << "[]" << "\n";
else cout << "error" << "\n";
}
test--;
}
return 0;
}
'🖥️ CS > Baekjoon Algorithms' 카테고리의 다른 글
#1992번 쿼드트리 (C++) (0) | 2020.11.20 |
---|---|
#2630번 색종이 만들기 (C++) (0) | 2020.11.19 |
#1021번 회전하는 큐 (C++) (0) | 2020.11.18 |
#2565번 전깃줄 (C++) (0) | 2020.11.17 |
#1874번 스택 수열 (C++) (0) | 2020.11.13 |