1918 | 후위 표기식
https://www.acmicpc.net/problem/1918



작성 코드
express = input()
stack = []
answer = []
for exp in express:
if exp not in ['+', '-', '*', '/', '(', ')']:
answer.append(exp)
elif exp == '(':
stack.append(exp)
elif exp == ')':
while stack[-1] != '(':
answer += stack.pop()
stack.pop()
elif exp in ['+', '-']:
while stack and (stack[-1] in ['*', '/', '-', '+']):
answer += stack.pop()
stack.append(exp)
elif exp in ['*', '/']:
while stack and (stack[-1] in ['/', '*']):
answer += stack.pop()
stack.append(exp)
answer += stack[::-1]
print(''.join(answer))
- 일일이 우선 순위 비교
이상 코드
s = input()
priority = {'*': 2, '/': 2, '+': 1, '-': 1, '(': 0}
op = []
for c in s:
if 'A' <= c <= 'Z':
print(c, end="")
elif c == '(':
op.append(c)
elif c == ')':
while op and op[-1] != '(':
print(op.pop(),end="")
op.pop()
else:
while op and priority[c] <= priority[op[-1]]:
print(op.pop(), end="")
op.append(c)
while op:
print(op.pop(), end="")
- 알파벳(대문자)인지 확인할 때 'A' <= c <= 'Z'
- 딕셔너리에 우선순위 저장 후 비교
반응형
'Algorithm > BOJ' 카테고리의 다른 글
| [BOJ][#] 1002 | 터렛 (0) | 2022.01.25 |
|---|---|
| [BOJ][#] 1920 | 수 찾기 (0) | 2022.01.24 |
| [BOJ] 2846 | 오르막길 (0) | 2022.01.19 |
| [BOJ] 1929 | 소수 구하기 (0) | 2022.01.13 |
| [BOJ] 1436 | 영화감독 숌 (0) | 2022.01.06 |
댓글