BOJ

백준 1935 - 후위표기식2

yanJuicy 2019. 6. 11. 17:34
반응형

문제

https://www.acmicpc.net/problem/1935

 

1935번: 후위표기식2

첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이는 100을 넘지 않는다) 그리고 셋째 줄부터 N+2번째 줄까지는 각 피연산자에 대응하는 값이 주어진다. (3번째 줄에는 A에 해당하는 값, 4번째 줄에는 B에 해당하는값 , 5번째 줄에는 C ...이 주어진다, 그리고 피연산자에 대응 하는 값은 정수이다)

www.acmicpc.net

 

풀이

후위표기식으로 된 식을 계산하는 문제이다.

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