1. 풀이방법
- 커서가 여러칸씩 뛰는 명령어는 없으므로 상대적으로 간단하였습니다.
- 저는 커서의 앞쪽은 VECTOR 커서의 뒤쪽은 STACK 을 이용하였습니다.
- 방법은 여러가지가 있을 것 같습니다 편하신대로...
- 커서를 왼쪽으로 옮길 때 커서의 뒤쪽이 되는 한 문자는 STACK에 푸쉬하고
- 커서를 오른쪽으로 옮길 때는 STACK에서 POP해 와서 다시 VECTOR에 넣는 식으로 하였습니다.
- 아마 시작할 떄의 커서의 위치가 맨 뒤쪽이라서 이러한 생각을 자연스럽게 하게된 것 같습니다.
2. 주의사항
3. 나의코드
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include<queue>
#include<stack>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
cin.tie(0); cout.tie(0);
string s;
vector<char> tmpc;
stack<char> tmps;
int cursor;
cin >> s;
for (int i = 0; i < s.length(); i++) {
tmpc.emplace_back(s[i]);
}
cursor = s.length();
int n;
cin >> n;
while (n--) {
char c;
cin >> c;
if (c == 'L') {
if (cursor == 0) continue;
else { //커서 뒤쪽은 스택으로 옮겨 놓음
tmps.push(tmpc[cursor - 1]); tmpc.pop_back(); cursor--;
}
}
else if (c == 'D') {
if (tmps.empty()) continue;
else {
tmpc.emplace_back(tmps.top()); tmps.pop();
cursor++;
}
}
else if (c == 'B') {
if (cursor == 0) continue;
else {
tmpc.pop_back();
cursor--;
}
}
else {
char c;
cin >> c;
tmpc.emplace_back(c);
cursor++;
}
}
//출력부
for (int i = 0; i < tmpc.size(); i++) {
cout << tmpc[i];
}
while (!tmps.empty()) {
cout << tmps.top();
tmps.pop();
}
return 0;
}
'알고리즘 문제풀이 > 스택' 카테고리의 다른 글
백준 10799 [C++] (0) | 2021.01.09 |
---|---|
백준 1874 [C++] (0) | 2021.01.09 |
백준 3986 (0) | 2020.03.02 |
백준 2493 (0) | 2020.01.08 |