본문 바로가기
알고리즘/Stack & Queue & Deck

[Stack] 백준 1935번 - 후위 표기식2

by 코딩균 2021. 2. 26.

 

생각하기

문자를 숫자화하여서 index 삼아 배열에 숫자를 저장

A~Z사이면 stack에 넣고 

연산자이면 stack에서 두개를 꺼내서(꺼낼때 변수 저장 거꾸로) 둘을 연산 후 다시 stack에 push

 

#include <iostream>
#include <vector>
#include <map>
#include <stack>
#include <string>
#include <algorithm>
using namespace std;
#define endl '\n'
#define MAX 1000000

int N;
int alpha[26];

int main()
{
    ios_base::sync_with_stdio(0);
    cin.tie(0), cout.tie(0);

   cin>>N;

   string input;
   stack<double> st;

   cin>>input;

   char letter = 'A';
   double number;
   for(int i=0; i<N; i++){
       cin>>number;
       alpha[i] = number;
   }
   double a, b;
   for(int i=0; i<input.length(); i++){
       if(input[i]>='A' && input[i]<='Z'){
           st.push(alpha[input[i]-'A']);
       }
       else{
           b = st.top();
           st.pop();
           a = st.top();
           st.pop();
           if(input[i]=='+'){
               st.push(a+b);
           }
           else if(input[i]=='*'){
               st.push(a*b);
           }
           else if(input[i]=='/'){
               st.push(a/b);
           }
           else if(input[i]=='-'){
               st.push(a-b);
           }

       }
   }
   cout<<fixed;
   cout.precision(2);
   cout<<st.top()<<endl;

}