[BaekJoon]백준 5430번 AC
문제: https://www.acmicpc.net/problem/5430
내코드
-처음에 문자열 파싱하는 부분이 어려웠다.
-[1,2,3] 이렇게 주어졌을때 1, 2, 3을 deque에 넣어야했다.
-헷갈렸던 부분은 숫자가 두자리 숫자가 주어질 수도 있었다는것.
-','를 만나면 tmp를 deque에 push_back 시켜주고 tmp를 0으로 초기화 시켜주고,
','이 아닌경우 10의 자리수인경우 해당값을 tmp에 넣어주고, 1의 자리수인경우 (tmp에 들어있는 10의 자리수 숫자 * 10 + 1의 자리수 숫자)를 해줬다.
-그외에는 크게 어려운 부분이 없었다.
-R이 나왔을때는 숫자 배열이 뒤집어졌다는 표시로 bool 변수 back = true;를 시켜주고 출력할때 뒤에서 부터 출렸했다.
#include <iostream>
#include <string.h>
#include <deque>
using namespace std;
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(0);
int testCase = 0; cin >> testCase;
while (testCase--) {
string func, arr; int num = 0;
bool back = false, error = false;
deque<int> dq;
cin >> func >> num >> arr;
//initialize deque
arr.erase(0, 1); arr.pop_back();
int len = arr.length(), tmp = 0;
for (int i = 0; i < len; i++) {
if (arr[i] == ',') {
dq.push_back(tmp);
tmp = 0;
}
else {
tmp = tmp * 10 + arr[i] - 48;
}
}
if (tmp != 0) {
dq.push_back(tmp);
}
//reverse and delete array
int n = func.length();
for (int i = 0; i < n; i++) {
//if function is 'R'
if (func[i] == 'R') {
if (back == false) {
back = true;
}
else {
back = false;
}
}
//if function is 'D'
else {
int size = dq.size();
if (size == 0) {
cout << "error\n";
error = true;
break;
}
else {
if (back == false) dq.pop_front();
else dq.pop_back();
}
}
}
//print
if (error == true) continue;
cout << "[";
//if reversed
while (!dq.empty() && back == true) {
cout << dq.back();
dq.pop_back();
if (!dq.empty()) cout << ",";
}
//if not reversed
while (!dq.empty() && back == false) {
cout << dq.front();
dq.pop_front();
if (!dq.empty()) cout << ",";
}
cout << "]\n";
}
return 0;
}
22/10/02 Python으로 다시품
from collections import deque
T = int(input())
for _ in range(T):
func = list(input())
n = int(input())
tmp = input()
tmp = tmp.replace("[", "")
tmp = tmp.replace("]", "")
tmp = tmp.split(",")
if tmp[0] == "":
queue = deque()
else:
queue = deque(tmp)
is_reverse = False
is_error = False
for f in func:
if f == "R":
is_reverse = not is_reverse
elif f == "D":
if len(queue) == 0:
is_error = True
break
if is_reverse:
queue.pop()
else:
queue.popleft()
if is_error:
print("error")
else:
if is_reverse:
queue.reverse()
print("[" + ",".join(queue) + "]")
728x90
반응형
'CS > Algorithm 문제' 카테고리의 다른 글
[BaekJoon] 백준 10799번 쇠막대기 (0) | 2019.12.12 |
---|---|
[BaekJoon]백준 9012번 괄호 (0) | 2019.12.03 |
[BaekJoon]백준 1021번 회전하는 큐 (0) | 2019.12.02 |
[BaekJoon] 백준 1874번 스택 수열 (0) | 2019.11.04 |
[BaekJoon] 백준 1919번 애너그램 (0) | 2019.10.21 |