Algorithm & Problem Solving/자료구조(Data Structure)
[백준 1918] 후위 표기식 (Python) (중위 표기식 -> 후위 표기식 변환 문제)
baby_ohgu
2021. 10. 3. 15:57
https://www.acmicpc.net/problem/1918
문제풀이
cmd : 입력값
stack : 괄호와 연산자를 저장할 stack list
ans : 결과 list
스택을 이용해서 연산자의 우선순위를 결정해 결과 list에 넣는 방식으로 해결하였다.
1. A~Z 알파벳일 경우 ans에 바로 추가한다.
2. '(', '+', '-'. '*', '/' 연산자일 경우 stack에 추가한다.
- '*' 나 '/' 일 경우, 연산자 우선순위에 의해서 현재 stack에 추가로 '*', '/' 가 있는지 탐색 후 stack에 추가한다.
- '+' 나 '-' 일 경우, 연산자 우선순위에 의해서 현재 stack에 '(' 가 있는지 탐색 후 stack에 추가한다.
- ')' 의 경우, stack에서 '(' 탐색 후 stack 에서 '('를 빼준다.
3. stack에 남아있는 값을 ans에 추가한다.
코드
if __name__ == '__main__':
cmd = input()
stack, ans = [], []
for ch in cmd:
if 'A' <= ch <= 'Z':
ans.append(ch)
else:
if ch == '(':
stack.append(ch)
elif ch == '*' or ch == '/':
while stack and (stack[-1] == '*' or stack[-1] == '/'):
ans.append(stack.pop())
stack.append(ch)
elif ch == '+' or ch == '-' or ch == ')':
while stack and stack[-1] != '(':
ans.append(stack.pop())
if ch != ')':
stack.append(ch)
else:
stack.pop()
while stack:
ans.append(stack.pop())
print(''.join(map(str, ans)))
결과
문제풀이나 코드에서 이상한 부분 지적은 언제나 환영합니다!