문제링크
https://www.acmicpc.net/problem/5397
알고리즘
스택 을 두개 만듭니다 하나는 문자열을 입력받는 스택 하나는 '<','>' 등을 수행할 때 보조 하는 스택.
left 함수는 문자열 스택이 !empty 일때, 문자열 스택의 top 을 보조 스택에 push 하고 pop
right 함수는 보조 스택이 !empty 일때, 보조 스택의 top 을 문자열 스택에 push 하고 pop
1. 문자열에서 '<' 가 입력되면 left 함수실행
2. 문자열에서 '>' 가 입력되면 right 함수실행
3. 문자열에서 '-' 가 입력되면 문자열스택이 !empty 이면 문자열 스택을 pop
4.문자열 입력이 끝난후 문자열 스택의 모든 문자를 보조 스택으로 push 하고
5. 보조 스택의 top 을 출력하면서 pop
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #include<iostream> #include<stack> using namespace std; stack<char> s; stack<char> ex; void left() { if (!s.empty()) { ex.push(s.top()); s.pop(); } } void right() { if (!ex.empty()) { s.push(ex.top()); ex.pop(); } } int main() { string str; int n; cin >> n; for (int i = 0; i < n; i++) { cin >> str; for (int j = 0; j < str.length(); j++) { if (str[j] == '<') left(); else if (str[j] == '>') right(); else if (str[j] == '-') { if(!s.empty()) s.pop(); } else { s.push(str[j]); } } int size = s.size(); for (int k = 0; k < size; k++) { ex.push(s.top()); s.pop(); } size = ex.size(); for (int j=0; j <size; j++) { cout << ex.top(); ex.pop(); } cout << "\n"; } } | cs |
'c++ > 백준' 카테고리의 다른 글
백준 14500번 : 테트로미노 (0) | 2020.03.25 |
---|---|
백준 2841번 외계인의 기타연주 (0) | 2019.11.21 |
백준 2493번 : 탑 (0) | 2019.11.20 |
백준 10799번 쇠막대기 (0) | 2019.11.20 |
백준 1918번 후위표기식 (0) | 2019.11.19 |