728x90
반응형
https://www.acmicpc.net/problem/1918
1918번: 후위 표기식
첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의
www.acmicpc.net
문제 해결
- 하나씩 뺐을 때 문자/괄호/연산부호 분리해서 문자와 괄호,연산부호와 분리한다음 재배열을 해야한다. 어떻게 해야할까... => 문자는 그대로 출력하므로 뽑으면 바로 문자열에 이어 붙이고 괄호,연산부호는 stack 안에 넣은 후 배열 하는 것이 좋을 것이다.
- 이제 순서에 대해서 고민을 해야하는데 이는 그림으로 생각을 해야지 편하다.(그림은 직접 그려보길 추천한다. 여러가지 경우가 있고 해봐야지 감이온다.) 사실 몇 개 그렸는데 뭔가 아쉬워서 첨부하지 않는다..
CODE
import sys
input = sys.stdin.readline
cal = list(input().strip())
stack = []
r = ''
for spell in cal:
if 'A' <= spell <='Z':
r += spell
else:
if spell == '(':
stack.append(spell)
elif spell == '*' or spell=='/':
while stack and (stack[-1] == '*' or stack[-1]=='/'):
r += stack.pop()
stack.append(spell)
elif spell == '+' or spell=='-':
while stack and stack[-1] !='(':
r += stack.pop()
stack.append(spell)
elif spell ==')':
while stack and stack[-1] != '(':
r += stack.pop()
stack.pop()
while stack:
r += stack.pop()
print(r)
728x90
반응형
'알고리즘 > [python] 백준 BOJ' 카테고리의 다른 글
[Python] 백준 11655 ROT13 (0) | 2022.12.16 |
---|---|
[Python] 백준 10820 문자열 분석 (0) | 2022.12.16 |
[Python] 백준 1935 후위 표기식2 (0) | 2022.12.14 |
[Python] 백준 17413 단어 뒤집기2 (0) | 2022.12.14 |
[Python] 백준 1717 집합의 표현 (0) | 2022.12.13 |
댓글