문제
https://www.acmicpc.net/problem/5397
풀이
커서를 기준으로 컨테이너를 두개로 나눠서 >, <, - 에 따라서 옮겨주면 풀 수 있다.
벡터는 원소의 추가/삽입마다 복사해야하므로 속도가 느리니까 원소 변경이 잦다면다른 컨테이너를 써야 한다.
힌트를 보면 스택이라고 나와있는데 노드로 푸는게 직관적으로 더 좋은 것 같다.
그리고 다들 보면 list로 풀기도 한다.
소스
#include <iostream>
#include <list>
#include <string>
#include <stack>
#include <vector>
#include<algorithm>
int main()
{
int T = 0; std::cin >> T;
while(T--)
{
std::string code; std::cin >> code;
std::stack<char> c1, c2;
char temp; char c;
for(int i=0; i<code.length(); ++i)
{
c = code[i];
if(c == '<')
{
if(c1.empty()) continue;
c2.push(c1.top());
c1.pop();
}
else if(c == '>')
{
if(c2.empty()) continue;
c1.push(c2.top());
c2.pop();
}
else if(c == '-')
{
if(c1.empty()) continue;
c1.pop();
}
else
c1.push(c);
}
std::string result;
while (!c2.empty())
{
c1.push(c2.top());
c2.pop();
}
while(!c1.empty())
{
result += c1.top();
c1.pop();
}
std::reverse(result.begin(), result.end());
std::cout << result <<'\n';
if(T==0) break;
}
return 0;
}
|
cs |