문제링크 : https://www.acmicpc.net/problem/1918
알고리즘
1. 문자면 출력값에 더해주고 여는 괄호면 스택에 push , 닫히는 괄호면 스택이 비거나 top이 여는 괄호 일 때까지 pop 하면서 출력값에 더해줌.
2.사칙연산을 처리 해준다.
코드
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 58 59 60 61 62 | #include<iostream> #include <stack> using namespace std; int main() { string str; cin >> str; string result; stack<char> s; for (int i = 0; i < str.length(); i++) { //문자면 출력값에 더함. if ('A' <= str[i] && str[i] <= 'Z') { result += str[i]; } else { //여는 괄호 면 스택에 push if (str[i] == '(') { s.push(str[i]); } //닫히는 가로면 스택이 비거나 top 이 '(' 일떄까지 //pop 하면서 결과값에 더해줌. else if (str[i] == ')') { while (!s.empty() && s.top() != '(') { result += s.top(); s.pop(); } //마지막에 여는괄호 pop if (!s.empty()) s.pop(); } //사칙연산 else if (str[i] == '*' || str[i] == '/') { while (!s.empty() && (s.top() == '*' || s.top() == '/')) { result += s.top(); s.pop(); } s.push(str[i]); } else if (str[i] == '+' || str[i] == '-') { while (!s.empty() && s.top() != '(') { result += s.top(); s.pop(); } s.push(str[i]); } } } while (!s.empty()) { result += s.top(); s.pop(); } cout << result << "\n"; } | cs |
'c++ > 백준' 카테고리의 다른 글
백준 14500번 : 테트로미노 (0) | 2020.03.25 |
---|---|
백준 2841번 외계인의 기타연주 (0) | 2019.11.21 |
백준 5397 키로거 (0) | 2019.11.21 |
백준 2493번 : 탑 (0) | 2019.11.20 |
백준 10799번 쇠막대기 (0) | 2019.11.20 |