본문 바로가기
Algorithm/BOJ

[BOJ] 1918 | 후위 표기식

by 밤초록 2022. 1. 21.
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

댓글