백준1918 후위 표기식

2020.02.17

백준1918 / 후위 표기식

풀이

  • order : 계산에 필요한 연산기호, 문자의 우선순위를 저장하는 딕셔너리
  • calculator : ( 가 나오면 push, 문자가 나오면 push, 연산기호들이 나오면 연산기호의 우선순위가 낮은 녀석들(문자포함)을 스택에서 pop해서 결과에 저장하고 현재 연산기호 push(단, ) 는제외)

코드 (python)

inputData = input()

myStack = []
top = -1

order = {'(' : 4, ')' : 4,'+': 3, '-': 3, '*': 2, '/': 2}
for i in range(26):
    order[chr(i + ord('A'))] = 0

def calculator(inStr):
    global top
    result = []
    for i in inStr:
        if i=='(' or (ord(i) >= ord('A') and ord(i) <= ord('Z')):
            myStack.append(i)
            top += 1
        else:
            while top >= 0 and order[i] >= order[myStack[top]]:
                if myStack[top] == '(' and i==')':
                    myStack.pop()
                    top-=1
                    break
                else:
                    result.append(myStack.pop())
                    top -= 1

            if i != ')':
                myStack.append(i)
                top += 1

    while top >= 0:
        result.append(myStack.pop())
        top -= 1
    return result

print(''.join(calculator(inputData)))

실수

괄호, 우선순위, 그에 따른 push, pop을 정확히 구현하는 데에서 실수가 몇번 있었다.

'SW > 알고리즘 문제풀이' 카테고리의 다른 글

ALGOSPOT TRIANGLEPATH  (0) 2020.02.17
ALGOSPOT WILDCARD  (0) 2020.02.17
백준17070 파이프 옮기기 1  (0) 2020.02.17
백준17406 배열돌리기4  (0) 2020.02.16
백준17471 게리맨더링  (0) 2020.02.15