728x90
https://www.acmicpc.net/problem/5430
언제 풀었는지 모르는 문제지만 새롭게 풀었다.
푸는 방식은 deque같은 자료구조를 사용하지 않고 배열로만 접근해서 풀었는데, start와 end 인덱스, 순회방향을 변수로 R일땐 순회 방향만 바꾸고, D일땐 순회 방향에 맞는 맨 앞에있는 원소를 제거했다.
그외엔 어려운게 없었고 입출력은 C++이라 조금 귀찮은 작업이었다. 파이썬이라면 입출력이 조금 쉬웠을것이다.
#include<iostream>
#include<string> // stoi, to_string
using namespace std;
int arr[100000];
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int T, N, idx, i, start_idx, end_idx;
bool forward, error;
string p, tmp, tmp_num, answer;
cin >> T;
while (T) {
T--;
cin >> p >> N >> tmp;
idx = 0;
tmp_num = "";
for (i = 1; i < tmp.length(); i++)
{
if (tmp[i] == ',' || tmp[i] == ']') {
if (tmp_num == "") {
continue;
}
arr[idx] = stoi(tmp_num);
idx++;
tmp_num = "";
continue;
}
tmp_num += tmp[i];
}
start_idx = 0;
end_idx = N;
forward = true; // array traversal direction
error = false;
for (i = 0; i < p.length(); i++)
{
if (p[i] == 'R') {
forward = !forward;
}
else if (p[i] == 'D')
{
if (start_idx == end_idx) {
error = true;
break;
}
else {
if (forward) {
start_idx++;
}
else {
end_idx--;
}
}
}
}
answer = "";
if (error) {
cout << "error\n";
}
else {
answer = "[";
if (forward)
{
for (i = start_idx; i < end_idx; i++)
{
answer += to_string(arr[i]);
if (i < end_idx - 1)
answer += ',';
}
}
else {
for (i = end_idx - 1; i >= start_idx; i--)
{
answer += to_string(arr[i]);
if (i > start_idx)
answer += ',';
}
}
answer += "]\n";
}
cout << answer;
}
return 0;
}
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 2665 미로만들기, python, C++ (0) | 2022.01.04 |
---|---|
[백준] 17404 RGB거리 2, python (0) | 2022.01.04 |
[백준] 1182 부분 수열의 합, python (0) | 2022.01.03 |
[백준] 2098 외판원 순회, python (0) | 2022.01.03 |
[백준] 1311 할 일 정하기 1, python, C++ (0) | 2022.01.02 |