목차
Infix Notation
Infix 표기법은 연산 시에 피연산자 사이에 연산자를 배치하는 것이다. a + b처럼 인간이 알아보기 가장 쉬운 형태이다.
Postfix Notation
Postfix 표기법은 연산시에 피연산자 뒤에 연산자를 배치하는 것이다. 컴퓨터가 인식하기 쉽게 하기 위하여 고안되었다. a와 b를 더하는 연산은 Postfix 라면 a b + 가 된다.
Postfix Implementation
def cal_by_postfix(exp):
s = deque()
for e in exp:
if e not in operators:
s.append(e)
elif e == '+':
n1 = s.pop()
n2 = s.pop()
s.append(n2 + n1)
elif e == '-':
n1 = s.pop()
n2 = s.pop()
s.append(n2 - n1)
elif e == '*':
n1 = s.pop()
n2 = s.pop()
s.append(n2 * n1)
elif e == '/':
n1 = s.pop()
n2 = s.pop()
s.append(n2 / n1)
elif e == '^':
n1 = s.pop()
n2 = s.pop()
s.append(n2 ** n1)
return s.pop()
Postfix 를 구현할 때에는 스택을 이용한다. 피연산자가 입력되면 먼저 스택에 넣게 된다. 연산자가 입력되면, 이는 해당 연산자 앞의 두 개의 피연산자에 대한 연산이므로, 앞서 스택에 들어갔던 피연산자 두 개를 pop 하여 다시 꺼내 연산을 처리하고 그 결괏값을 다시 스택에 넣는다. 이를 반복하여 스택에 최종적으로 남게 되는 결과 값이 된다.
Test Case
cal_by_postfix([2, 3, 1, '*', '+', 9, '-'])
# -4
cal_by_postfix([10, 6, 3, 2, '^', 7, '-', 1, 1, 2, '*', '+', '^', '*', '+', 51, '-'])
# 7
'☆IT 개발 프로그램☆ > Phthon' 카테고리의 다른 글
[파이썬/Python] mysql connector 라이브러리로 MySql 연동하기 (0) | 2020.06.04 |
---|---|
[파이썬 주식 분석] 매수 적정 PER 구하기 (당기순이익 증감 예상이용) (0) | 2020.06.04 |
[파이썬] 자료구조 Comprehension : 람다형 자료구조 코딩 (0) | 2020.06.04 |
[파이썬] *args, **kwargs를 이용해 메소드 축약 작성하는 법 (0) | 2020.06.04 |
[파이썬 Collections API] 파이썬3의 자료구조 컨테이너 모듈 (0) | 2020.06.04 |