Search
Duplicate

에디터

주차
15
문제번호
1406
언어
C++
티어
실버
유형
자료구조
nj_Blog
nj_상태
완료
이해도
풀이
사람
이해도 2
13 more properties

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++
복사