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-