문제: https://www.acmicpc.net/problem/1918
후위표기식은 스택의 대표주자라 할 만큼 중요한 내용이다.
알고리즘은 간단하다.
1. 열린 괄호 -> push
2. 닫힌 괄호 -> 열린 괄호가 나올때까지 pop
3. 피연산자 -> 그대로 출력
4. 연산자 -> 자기보다 우선순위가 낮거나, 열린 괄호가 나오거나, 스택이 빌 때까지 pop 후 push
코드는 이를 그대로 구현했다.
4번에 열린 괄호가 나오는 것을 별도로 처리해주지 않은데 주의.
난이도는 1.5/5 정도?
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 | #include <iostream> #include <stack> #include <string> using namespace std; int pr(char c) { if(c=='(') return 0; else if(c=='+' || c=='-') return 1; else if(c=='*' || c=='/') return 2; } int main() { stack<char> S; string str; cin>>str; for(int i=0;i<str.size();i++) { char c=str.at(i); if('A'<=c && c<='Z') cout<<c; else if(c=='(') S.push(c); else if(c==')') { while(S.top()!='(') { cout<<S.top(); S.pop(); } S.pop(); } else { while(!S.empty() && pr(S.top())>=pr(c)) { cout<<S.top(); S.pop(); } S.push(c); } } while(!S.empty()) { cout<<S.top(); S.pop(); } return 0; } | cs |
'Problem Solving > 문제풀이' 카테고리의 다른 글
[BOJ] 2439 탑 (0) | 2018.02.01 |
---|---|
[BOJ] 1011 Fly me to the Alpha Centauri (1) | 2018.02.01 |
[BOJ] 1874 스택 수열 (0) | 2018.02.01 |
[BOJ] 3986 좋은 단어 (0) | 2018.02.01 |
[BOJ] 2841 외계인의 기타 연주 (0) | 2018.02.01 |