[백준] 5430 - AC
2024. 8. 11. 11:44ㆍPS/백준
728x90
문제 링크
https://www.acmicpc.net/problem/5430
느낀 점
1. 문자열은 왠만하면 문자열로 처리하는 게 좋다.
2. 크기가 큰 문자열을 함수의 인자로 받을 때, 참조 변수를 이용하면 메모리 낭비를 줄일 수 있다.
3. rbegin, rend를 이용하면 순회를 더 깔끔하게 할 수 있다.
#include <iostream>
#include <deque>
#include <string>
#include <algorithm>
using namespace std;
deque<string> nList;
void divide(const string& str){
nList.clear();
string temp = "";
for (auto ch: str)
{
if (ch == '[')
{
continue;
} else if (ch == ',' or ch == ']')
{
if (!temp.empty())
{
nList.push_back(temp);
temp = "";
}
} else
{
temp += ch;
}
}
}
void print(bool reverseFlag){
cout << '[';
if (reverseFlag)
{
for (auto i = nList.rbegin(); i != nList.rend(); i++)
{
if (i != nList.rend() - 1)
{
cout << *i << ',';
} else
{
cout << *i;
}
}
} else
{
for (auto i = nList.begin(); i != nList.end(); i++)
{
if (i != nList.end() - 1)
{
cout << *i << ',';
} else
{
cout << *i;
}
}
}
cout << ']' << '\n';
}
int main(){
int n, T;
cin >> T;
for (size_t i = 0; i < T; i++)
{
bool reverseFlag = false;
bool errorFlag = false;
string p, nString;
string answer = "[";
cin >> p >> n >> nString;
divide(nString);
for (size_t i = 0; i < p.size(); i++)
{
if (p[i] == 'R')
{
reverseFlag = !reverseFlag;
} else if (p[i] == 'D')
{
if (nList.empty())
{
cout << "error" << "\n";
errorFlag = !errorFlag;
break;
}
if (!reverseFlag)
{
nList.pop_front();
} else
{
nList.pop_back();
}
}
}
if (!errorFlag)
{
print(reverseFlag);
}
}
return 0;
}
'PS > 백준' 카테고리의 다른 글
[백준] 14567 - 선수과목 (0) | 2024.08.16 |
---|---|
[백준] 11663 - 선분 위의 점 (0) | 2024.07.04 |
[백준] 7795 - 먹을 것인가 먹힐 것인가 (0) | 2024.07.01 |
[백준] 4963 - 섬의 개수 (0) | 2024.06.26 |
[백준] 2644 - 촌수계산 (0) | 2024.06.26 |