☆IT 개발 프로그램☆/Phthon

Python으로 계산기 구현하기 (Postfix)

호기심을 품고사는 중 2020. 6. 4. 15:00

목차

1. Infix 표기법

2. Postfix 표기법

3. 코드 구현

4. 테스트 케이스


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