알고리즘/BOJ

백준 1935번 후위표기식2

꾸준함. 2018. 9. 8. 02:15

문제 링크입니다: https://www.acmicpc.net/problem/1935


자료구조 시간에 후위표기식을 이용한 계산기를 만들어 봤기 때문에 쉽게 접근할 수 있었습니다.


알고리즘은 아래와 같습니다.

1. 해당 인덱스가 연산자일 경우 스택에서 숫자 두 개를 꺼냅니다.

-> 두 번째로 꺼낸 숫자가 사실 먼저 나온 숫자이기 때문에 연산을 두 번째 숫자를 기준으로 합니다.

2. 해당 인덱스가 피연산자일 경우 스택에 추가합니다.

3. 반복문을 통해 1 혹은 2를 수행하면 결과는 스택의 top에 저장되어있습니다. 따라서 스택의 top을 출력해주면 됩니다.


#include <iostream>

#include <string>

#include <stack>

#include <iomanip>

using namespace std;

 

const int MAX = 26;

 

int alphabet[MAX];

 

int main(void)

{

        ios_base::sync_with_stdio(0);

        cin.tie(0);

        int N;

        cin >> N;

        string str;

        cin >> str;

       

        for (int i = 0; i < N; i++)

                 cin >> alphabet[i];

 

        stack<double> s;

        for (int i = 0; i < str.length(); i++)

        {

                 //operator

                 if (str[i] == '+' || str[i] == '-' || str[i] == '*' || str[i] == '/')

                 {

                         //두개의 피연산자를 꺼내고 연산

                         double a = s.top();

                         s.pop();

                         double b = s.top();

                         s.pop();

 

                         switch (str[i])

                         {

                         case '+':

                                 s.push(b + a);

                                 break;

                         case '-':

                                 s.push(b - a);

                                 break;

                         case '*':

                                 s.push(b * a);

                                 break;

                         case '/':

                                 s.push(b / a);

                                 break;

                         }

                 }

                 //operand

                 else

                         s.push(alphabet[str[i] - 'A']);

        }

 

        double result = s.top();

        cout << fixed;

        cout.precision(2);

        cout << result << "\n";

        return 0;

}


개발환경:Visual Studio 2017


지적, 조언, 질문 환영입니다! 댓글 남겨주세요~

반응형

'알고리즘 > BOJ' 카테고리의 다른 글

백준 3015번 오아시스 재결합  (2) 2018.09.08
백준 2841번 외계인의 기타 연주  (0) 2018.09.08
백준 1918번 후위표기식  (2) 2018.09.08
백준 1725번 히스토그램  (0) 2018.09.08
백준 3986번 좋은 단어  (0) 2018.09.08