상세 컨텐츠

본문 제목

[백준/파이썬]1918 후위 표기식

알고리즘 문제풀이

by 한백인데용 2023. 7. 19. 23:46

본문

728x90
반응형

https://www.acmicpc.net/problem/1918

 

1918번: 후위 표기식

첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의

www.acmicpc.net

 

문제

 

백준 1918 후위 표기식

너무 어렵게 풀었다. 이해가 된 것 같기도 한데 안된 것 같다...

 

설명은 주석으로..

 

정답


s = input()

ans = ''

stack = []

for c in s :
    if c == '(' or c == ')' : #최우선순위
        if c == '(' :
            stack.append(c)
        else :
            while stack and stack[-1] != '(' : # 괄호 시작 지점까지 있는 연산자를 모두 ans에 추가해줘야함.
                ans+=stack.pop()
            stack.pop() # 괄호 시작 제거

    elif c == '*' or c == '/' : # 2순위
        while stack and (stack[-1] == '*' or stack[-1] == '/') : # * 혹은 / 일때, 먼저 스택에 들어와 있는 *, /를 ans에 추가해줘야함.
            ans += stack.pop()
        stack.append(c) # 새로 들어온 * 혹은 /는 스택에 추가.
    elif c == '+' or c == '-' : # 3순위
        while stack and stack[-1] != '(' : # 새로 들어온 +, -는 스택에 들어있던 +, -, *, / 보다 우선순위가 낮음. 때문에 스택에 들어있는 모든 연산자를 ans에 추가해줘야함.
            ans += stack.pop()
        stack.append(c)
    else : 
        ans += c
for c in stack[::-1] : # 스택에 남아있는 연산자 ans에 추가
    ans += c
print(ans)

 

728x90
반응형

관련글 더보기