728x90
난이도
Silver3
문제집 링크
https://www.acmicpc.net/workbook/view/1406
문제 링크
https://www.acmicpc.net/problem/1406
문제 해결 과정
커서를 기준으로, 앞과 뒤 2개의 스택으로 나누어서 각 문자를 스택에 넣는다.
(커서 왼쪽 스택) | (커서) | (커서 오른쪽 스택)
커서를 왼쪽으로 옮기면 왼쪽에서 하나 빼서 오른쪽에 하나 넣는다.
커서를 오른쪽으로 옮기면 오른쪽에서 하나 빼서 왼쪽에 하나 넣는다.
지울거면 왼쪽 스택에서 하나뺀다.
추가할거면 왼쪽 스택으로 추가한다!
마지막 출력시에는 커서 전 스택을 pop하고 커서 후 스택으로 push후,
커서 후 스택을 pop하며 차례대로 출력하면 된다
주의할 점
1.만약 pop할 스택이 비어있다면, 오류가 나기 때문에 주의해서 사용해야 한다.
2.출력시, 순서에 따라 출력하므로 주의한다.
코드
#include <iostream>
#include <stack>
using namespace std;
stack<char> BOJstackA;//커서 기준 앞
stack<char> BOJstackB;//커서 기준 뒤
void Inputdata() {
string cmd;
cin >> cmd;
//문자열 입력받기
//모든 입력은 커서 뒤 스택에 넣기
for (int i = 0; i < cmd.length(); i++)
BOJstackA.push(cmd[i]);
}
void Outputdata() {
string result="";
while (!BOJstackA.empty()){
BOJstackB.push(BOJstackA.top());
BOJstackA.pop();
}
while (!BOJstackB.empty()){
result += BOJstackB.top();
BOJstackB.pop();
}
cout << result << endl;
}
void Editor() {
int repeat;
cin >> repeat;
char cmd;
for (int i = 0; i < repeat; i++) {
cin >> cmd;
if (cmd == 'L' && !BOJstackA.empty()) {
//커서가 왼쪽으로 가면, 커서 전 스택에서 pop하고,
//커서 후 스택으로 push
BOJstackB.push(BOJstackA.top());
BOJstackA.pop();
}
else if (cmd == 'D' && !BOJstackB.empty()) {
//커서가 오른쪽으로 가면, 커서 후 스택에서 pop하고,
//커서 전 스택으로 push
BOJstackA.push(BOJstackB.top());
BOJstackB.pop();
}
else if (cmd == 'B' && !BOJstackA.empty()) {
//커서 바로 전의 스택에서 pop!
BOJstackA.pop();
}
else if(cmd=='P') {
//입력은 왼쪽 stack에 push
char addcmd;
cin >> addcmd;
BOJstackA.push(addcmd);
}
}
}
int main() {
Inputdata();//데이터 입력받기
Editor();//데이터 연산
Outputdata();//데이터 출력하기
}
잘못된 부분이나 오해할 수 있는 부분이 있다면 언제든지
댓글 남겨주시기 바랍니다!
![](https://t1.daumcdn.net/keditor/emoticon/niniz/large/006.gif)
728x90
'알고리즘 풀이 > 백준,BOJ [코드플러스]' 카테고리의 다른 글
[백준/자료구조 1/C++] 1874 - 스택 수열 (0) | 2021.09.27 |
---|---|
[백준/자료구조 1/C++] 9012-괄호 (0) | 2021.09.04 |
[백준/자료구조 1/C++] 10828-스택 (0) | 2021.09.02 |
[백준/자료구조 1/C++] 9093-단어 뒤집기 (0) | 2021.09.02 |