Memo
로직 설명
•
커서의 왼쪽과 오른쪽을 각각 2개의 스택의 맨 윗부분으로 구현했습니다.
자료 구조
•
stack
코드 설명
•
void cursor_moving(char command, char addition)
→ 명령어에 따라 커서의 움직임, 문자의 추가/제거 작업이 이뤄집니다.
•
void solve()
1. 스택에 문자열의 값을 차례로 저장합니다.
2. M 만큼의 명령어를 받습니다. 받을 때 마다, cursor_moving 함수를 호출합니다.
3. 작업이 모두 끝난 후, 커서 왼쪽 부분에 해당하는 스택을 오른쪽 부분으로 옮깁니다.
어려웠던 부분
•
스택을 두 개 둬서 구현하는 아이디어를 떠올리기까지 오래 걸렸습니다.
개선할 부분
•
스택을 두 개를 써야만 구현이 가능한지 고민해볼 필요가 있어보입니다.
Code
제출 날짜
@4/8/2021
메모리
2940 KB
시간
36 ms
#include <iostream>
#include <stack>
int M;
std::string str;
std::stack<char> s;
std::stack<char> save;
void input_faster()
{
std::ios_base::sync_with_stdio(false);
std::cin.tie(0);
std::cout.tie(0);
}
void input()
{
input_faster();
std::cin >> str;
std::cin >> M;
}
void cursor_moving(char command, char addition)
{
if (command == 'L' && !s.empty())
{
save.push(s.top());
s.pop();
}
else if (command == 'D' && !save.empty())
{
s.push(save.top());
save.pop();
}
else if (command == 'B' && !s.empty())
s.pop();
else if (command == 'P')
s.push(addition);
}
void solve()
{
char command, addition;
for (size_t i = 0 ; i < str.size(); i++)
s.push(str[i]);
while (M--)
{
std::cin >> command;
if (command == 'P')
std::cin >> addition;
cursor_moving(command, addition);
}
while (!s.empty())
{
save.push(s.top());
s.pop();
}
}
void print_val()
{
while (!save.empty())
{
std::cout << save.top();
save.pop();
}
}
int main()
{
input();
solve();
print_val();
return (0);
}
C++
복사