후위 표기법 2
소괄호를 포함한 후위 표기법 바꾸기
소괄호()
는 *
보다 우선순위가 높다.
후위 표기법은 우선순위가 높은 것을 먼저 출력하므로, 열린 소괄호가 나오면 스택에 넣는다.
이후 닫힌 소괄호가 나오면 스택에 열린 소괄호 나올 때 까지 pop하여 연산자를 결과값에 추가한다.
- 괄호는 변수에 추가하면 안되므로 스택에서 pop하여 제거한다.
1 | def solution(str): |
- 코딩테스트를 본다고 생각하고 리스트를 활용하여 위 문제를 풀어보았다.
isnumeric()
함수는 문자열이 숫자인지 판단하는 메서드이다.- stack의 top을 의미하는 s[-1] 슬라이싱을 활용하였다.
- 빈 리스트는 논리값이 False라는 점을 활용하여 while 반복문을 실행했다.
후위 표기법 계산하기
- 문자열을 순회하면서 해당 문자가 숫자면 정수형으로 변환하여 스택에 push
- 연산자이면 스택에서 두 수를 pop하여 계산
- 스택은 후입선출이므로, 처음 pop한 수를 n2, 두번째 pop한 수를 n1으로 두고
(n1 연산자 n2)
로 계산한다. - 계산결과를 스택에 push
- 스택에 마지막에 저장된 값이 결과값이다.
1 | def eval_postfix(expression): |