-
Python으로 계산기 구현하기 (Postfix)개발지식 아카이브/Python 2019. 12. 5. 15:01
목차
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
'개발지식 아카이브 > Python' 카테고리의 다른 글
Python segmentation fault 해결방법 (0) 2022.09.24 python CONDA 설치해 사용하기 (0) 2022.06.04 [파이썬 Collections API] 파이썬3의 자료구조 컨테이너 모듈 (0) 2019.12.02 [파이썬] *args, **kwargs를 이용해 메소드 축약 작성하는 법 (0) 2019.09.24 [파이썬] 자료구조 Comprehension : 람다형 자료구조 코딩 (0) 2019.09.22