문제풀이/백준(Boj) 문제풀이

[백준][스택] - 1935. 후위 표기식2(파이썬)

얄루몬 2022. 7. 17. 03:24

오답!

#해당 수를 해당 문자에 매칭시키고 후위 연산을 진행해준다.

n = int(input())
s = list(input())
cnt = 1
stack = []


for _ in range(n):
    int(input())

    
for i in range(len(s)):
    if s[i].isalpha():
        s[i] = str(cnt)
        cnt += 1

for x in s:
    if x.isdigit():
        stack.append(float(x))
    else:
        if x == "+":
            b = stack.pop()
            a = stack.pop()
            stack.append(a+b)
        elif x == "-":
            b = stack.pop()
            a = stack.pop()
            stack.append(a-b)
        elif x == "*":
            b = stack.pop()
            a = stack.pop()
            stack.append(a*b)
        elif x == "/":
            b = stack.pop()
            a = stack.pop()
            stack.append(a/b) 

print("%.2f" %stack[0])
  • 오답인 이유는 아마도 알파벳 부분을 숫자로 바꿔주는 부분이 틀렸을 것이다.
    • 계속해서 늘어가는 것이 아닌 반복하는 AA+A 이런 경우에도  A는 1이어야 하기에 고정되는 값이 필요했다. 나는 이부분을 간과하고 풀어 틀렸다 

정답

#해당 수를 해당 문자에 매칭시키고 후위 연산을 진행해준다.

n = int(input())
s = list(input())

stack = []

num = [int(input()) for _ in range(n)]
for x in s:

    if 'A' <= x <= 'Z':
        stack.append(num[ord(x)-ord('A')])

    else:
        b = stack.pop()
        a = stack.pop()
        if x == "+":
            stack.append(a+b)
        elif x == "-":
            stack.append(a-b)
        elif x == "*":
            stack.append(a*b)
        elif x == "/":
            stack.append(a/b) 

print("%.2f" %stack[0])
  • 해당 문자를 num에 있는 숫자로 바꿔주기 위해서 아스키 코드를 사용해서 num에 인덱스로 해당 숫자에 매칭 시켜주었다.
  • 또한 소수점 2번째까지 출력하라 했기에 위와 같이 진행했다. (포맷팅 사용!)