문제접근
•
스택 이용
•
커서를 기준으로 left_stack , right_stack 구분
•
입력을 다 받게 되면 커서는 가장 오른쪽에 존재하기 때문에 모두 left_stack에 push
•
커서를 왼쪽으로 옮길때마다 left_stack → right_stack
•
커서를 오른쪽으로 옮길때마다 right_stack → left_stack
놓쳤던 부분
•
stack.empty를 제대로 체크해주지 않아서 비어있는 스택에서 pop이 일어날때 segmentation fault 발생
코드
2808 KB
40 ms
#include <iostream>
#include <stack>
std::stack<char> left_stack;
std::stack<char> right_stack;
int m;
void input_setting()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
}
void input()
{
std::string str;
std::cin >> str;
for (int i = 0; i < str.size(); i++)
left_stack.push(str[i]);
std::cin >> m;
}
void process_p()
{
char cmd;
std::cin >> cmd;
left_stack.push(cmd);
}
void process_l()
{
if (!left_stack.empty())
{
right_stack.push(left_stack.top());
left_stack.pop();
}
}
void process_d()
{
if (!right_stack.empty())
{
left_stack.push(right_stack.top());
right_stack.pop();
}
}
void process_b()
{
if(!left_stack.empty())
left_stack.pop();
}
void print()
{
while(!right_stack.empty())
{
std::cout << right_stack.top();
right_stack.pop();
}
}
void solution()
{
char cmd;
for (int i = 0; i < m; i++)
{
std::cin >> cmd;
if (cmd == 'P')
process_p();
else if (cmd == 'L')
process_l();
else if (cmd == 'D')
process_d();
else
process_b();
}
while (!left_stack.empty())
{
right_stack.push(left_stack.top());
left_stack.pop();
}
print();
}
int main(void)
{
input_setting();
input();
solution();
return (0);
}
C++
복사