C#/C#200제

[C#] 16일차 - 109. Stack<T>와 Polish 계산기

반나무 2021. 2. 14. 10:50

polish 표기법은 피연산자 뒤에 연산자를 쓰게 된다.

 

1 + 2 를 1 2 + 로 표시한다.

이렇게 되면 수식에 괄호가 없어도 우선순위를 처리할 수 있게된다.

예를들어 (10 - 20) * 3 이라는 수식을 10 20 - 3 * 로 처리 할 수 있다.


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace A109_Stack
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.Write("계산할 수식을 Polish 표기법으로 입력하세요: ");
            string[] token = Console.ReadLine().Split();

            foreach (var i in token)
                Console.Write(" {0}", i);
            Console.Write(" = ");

            Stack<double> nStack = new Stack<double>();
            foreach(var s in token)
            {
                if (isOperator(s))
                {
                    switch (s)
                    {
                        case "+":
                            nStack.Push(nStack.Pop() + nStack.Pop());
                            break;
                        case "-":
                            nStack.Push(nStack.Pop() - nStack.Pop());
                            break;
                        case "*":
                            nStack.Push(nStack.Pop() * nStack.Pop());
                            break;
                        case "/":
                            nStack.Push(nStack.Pop() / nStack.Pop());
                            break;
                    }
                } else
                {
                    nStack.Push(double.Parse(s));
                }
            }
            Console.WriteLine(nStack.Pop());
        }

        private static bool isOperator(string s)
        {
            if (s == "+" || s == "-" || s == "*" || s == "/")
                return true;
            else
                return false;
        }
    }
}

반응형