본문 바로가기
알고리즘 (Python)

후위 표기식 만들기(스택)

by ppirae 2022. 3. 30.

인프런 김태원님의 파이썬 알고리즘 문제풀이를 듣고 작성한 글입니다.

https://inf.run/k3z6

 

파이썬 알고리즘 문제풀이 (코딩테스트 대비) - 인프런 | 강의

파이썬을 이용한 코딩테스트 문제풀이를 합니다., - 강의 소개 | 인프런...

www.inflearn.com

 

#강의 풀이
a = input()
stack = []
res = ''
for x in a:
    if x.isdecimal():
        res += x
    else:
        if x == '(':
            stack.append(x)
        elif x == '*' or x == '/':
            while stack and (stack[-1] == '*' or stack[-1] == '/'):
                res += stack.pop()
            stack.append(x)
        elif x == '+' or x == '-':
            while stack and stack[-1] != '(':
                res += stack.pop()
            stack.append(x)
        elif x == ')':
            while stack and stack[-1] != '(':
                res += stack.pop()
            stack.pop()
while stack:
    res += stack.pop()
print(res)

1. 피연산자는 그대로 출력

2. 여는 괄호이면 stack에 추가

3. 연산자가 * / 이면 stack안에 * / 를 pop하고 본인 추가

4. 연산자가 + - 이면 stack안에 여는 괄호가 아닐때까지 pop 하고 본인 추가

5. 닫힌 괄호이면 여는 괄호가 아닐때까지 pop하고 여는 괄호도 pop

6. stack에 남은 연산자 모두 출력

 

어렵구만.

똑같은 문제 (골드3 ㄷ)

https://www.acmicpc.net/problem/1918

 

1918번: 후위 표기식

첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의

www.acmicpc.net

 

'알고리즘 (Python)' 카테고리의 다른 글

부분집합 구하기 (DFS)  (0) 2022.04.01
응급실(큐)  (0) 2022.03.30
쇠막대기(스택)  (0) 2022.03.30
가장 큰 수(스택)  (0) 2022.03.27
역수열 (그리디)  (0) 2022.03.26

댓글