#1프로그래밍/#2 자료구조

문자열 계산식 구현 - 후위표기법#1

HopeDeveloper 2021. 8. 24. 14:26

1. 목적

 - 문자열 계산식을 순서대로 계산할 경우 우선 순위에 따른 계산 오류 발생

    ex) (1+2) * (3+4) / 4

        --> 아래 같이 계산 순서 필요

2. 계산식 표현법
  1) 중위 표현법

     - 연산자가 피연사자들 사이에 위치

  2) 후위 표현법

     - 연산자가 피연사자들 뒤에 위치 (사칙연산 프로그램을만들때 편리하게 설계)

 

설계 방법)

1) 피연산자(숫자)는 스택에 넣지 않고 그냥 출력

 

2) 연산자의 경우
    -> Stack이 비어 있으면 Stack에 저장

    -> Stack에 연산자가 있는 경우
                   ->연산자(Stack)의 우선순위가 같거나 크면 pop하여 출력하고 현재 연산자를 Stack에 저장

                   ->연산자(Stack)의 우선순위가 낮을 경우 현재 연산자를 Stack에 저장

3) 수식이 끝나면 스택이 빌 때 까지 POP하여 출력한다.

 

 

3. 연습문제
  문제 1) 중위 계산식 -> A+B*C

     - 후위 계산식 변환
     Step 1 : AB     /    Stack : +

     Step 2 : AB     /    Stack : +, *
     Step 3 : ABC*+

 

  문제 2) 중위 계산식 -> (A+B)*(C+D)

     - 후위 계산식 변환
     Step 1 : A                 / Stack : (, +

     Step 2 : AB+             / Stack :

     Step 3 : AB+             / Stack : *
     Step 4 : AB+CD         / Stack : *, (, +
     Step 5 : AB+CD+*

 

   문제 3) 중위 계산식 -> A * (B + C)
     - 후위 계산식 변환
     결과 : ABC+*

   문제 4) 중위 계산식 -> (A * ( B + C )) - D
     결과 : ABC+*D-