Search
Duplicate
📒

에디터

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

문제접근

스택 이용
커서를 기준으로 left_stack , right_stack 구분
입력을 다 받게 되면 커서는 가장 오른쪽에 존재하기 때문에 모두 left_stack에 push
커서를 왼쪽으로 옮길때마다 left_stackright_stack
커서를 오른쪽으로 옮길때마다 right_stackleft_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++
복사