반응형
문제 링크 : https://www.acmicpc.net/problem/5430
풀이
입출력 방식이 독특해서 처리해야할 과정이 조금 존재한다.
숫자 배열을 입력받을 때 "[1, 2, 3, 4]"와 같이 들어오므로
char 형식의 변수를 하나 생성하여 괄호와 쉼표를 입력받고 사용하지 않는다.
n == 0일 경우 괄호만 들어오므로 이 부분도 처리해야한다.
입력 처리가 완료되었으면 주어진 숫자들을 덱에 넣고 R, D 조건에 맞춰 구현하면 된다.
이 때, R이 들어올 때마다 원소들을 실제로 뒤집으면 시간 초과가 발생한다.
따라서, bool 변수 rev를 통해 원소가 뒤집어진 상태인지 아닌 지를 나타내면 된다.
삭제할 때에도 뒤집어져 있다면 pop_back을, 원상태라면 pop_front를 해줘야한다.
에러 발생 여부는 bool 변수 flag를 통해 처리하여 에러시 "Error"를
아니라면 덱의 원소들을 출력 형식에 맞게 출력한다.
코드
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(); cout.tie();
int T;
cin >> T;
for (int t = 0; t < T; t++) {
deque<int> dq;
string str;
int n;
bool flag = true;
bool rev = true;//true면 원 상태, false면 뒤집어진 상태
cin >> str >> n;
char trash;
if (n == 0)
cin >> trash;
for (int i = 0; i < n; i++) {
int tmp;
cin >> trash;
cin >> tmp;
dq.push_back(tmp);
}
cin >> trash;
for (int i = 0; i < str.size(); i++) {
if (str[i] == 'R') {
if (rev == true)
rev = false;
else
rev = true;
}
else {
if (dq.empty()) {
cout << "error" << '\n';
flag = false;
break;
}
else
if (rev == true)
dq.pop_front();
else
dq.pop_back();
}
}
if (flag == false)
continue;
else {
if (rev == true) {
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 << '[';
for (int i = dq.size() - 1; i >= 0; i--) {
if (i == 0)
cout << dq[i];
else
cout << dq[i] << ',';
}
cout << ']' << '\n';
}
}
}
}
반응형
'Programming Solve > BOJ' 카테고리의 다른 글
BOJ 14501 - 퇴사 / C++ (0) | 2022.05.04 |
---|---|
BOJ 14500 - 테트로미노 / C++ (0) | 2022.05.02 |
BOJ 9375 - 패션왕 신해빈 / C++ (0) | 2022.05.01 |
BOJ 10464 - XOR / C++ (0) | 2022.04.21 |
BOJ 1107 - 리모컨 / C++ (0) | 2022.04.21 |