반응형
문제
https://www.acmicpc.net/problem/1935
풀이
후위표기식으로 된 식을 계산하는 문제이다.
1. 피연산자를 만나면 스택에 push한다.
2. 연산자를 만나면 스택에 있는 두 개의 피연산자를 꺼내서 연산을 한다.
3. 연산 값을 다시 스택에 push한다.
빼기(-) 와 나누기(/)를 할 때 피연산자의 순서에 주의한다.
cpp에서 소수점 2자리까지 표현하는 방법은 다음과 같다.
cout << fixed; : 소수점 아래 값을 고정하는 표현
cout.precision(2); : 소수점 아래를 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 | #include <iostream> #include <stack> #include <string> using namespace std; int N; string post; int number[26]; stack<double> s; double result = 0; int main() { cin.tie(0); ios::sync_with_stdio(false); cin >> N; cin >> post; for (int i = 0; i < N; i++) cin >> number[i]; for (int i = 0; i < post.size(); i++) { if (post[i] >= 'A' && post[i] <= 'Z') s.push(number[post[i] - 'A']); else { double op1 = s.top(); s.pop(); double op2 = s.top(); s.pop(); switch (post[i]) { case '+': result = op1 + op2; break; case '-': result = op2 - op1; break; case '*': result = op1 * op2; break; case '/': result = op2 / op1; break; } s.push(result); } } cout << fixed; cout.precision(2); cout << s.top(); return 0; } | cs |
반응형
'BOJ' 카테고리의 다른 글
백준 1699 - 제곱수의 합 (0) | 2019.06.25 |
---|---|
백준 2294 - 동전 2 (0) | 2019.06.24 |
백준 1918 - 후위표기식 (0) | 2019.06.10 |
백준 2104 - 부분배열 고르기 (0) | 2019.06.08 |
백준 1904 - 01타일 (0) | 2019.06.05 |