2020.02.17
풀이
- 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 |
Comment