[Baekjoon] 1935 - 후위표기식2 (Python)
문제
풀이
후위표기식을 입력받고 표기식에 있는 알파벳을 그에 대응하는 입력한 숫자로 바로 바꿔주고 문제를 풀어나갈 생각이었다. 하지만 표기식의 index와 피연산자들의 index도 맞지 않는 등 잘 풀리지가 않았다.
그래서 ord()
를 활용해 word
의 유니코드 정수에서 ‘A’의 유니코드 정수를 빼주어 ‘A’~’Z’ 까지의 문자를 0에서 25까지 범위로 매핑하고,
뺀 값의 인덱스를 검색하여 stack
에 추가하는 식으로 풀었다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import sys
n = int(sys.stdin.readline()) # 피연산자 갯수
expression = sys.stdin.readline() # 후위표기식
num = [int(sys.stdin.readline()) for _ in range(n)]
stack = []
for word in expression:
if word.isalpha():
stack.append(num[ord(word) - ord('A')])
else:
num2 = stack.pop()
num1 = stack.pop()
if word == '+':
stack.append(num1 + num2)
elif word == '-':
stack.append(num1 - num2)
elif word == '*':
stack.append(num1 * num2)
elif word == '/':
stack.append(num1 / num2)
print('%.2f' % stack[0])
결과는 IndexError : pop from empty list..
num1 = stack.pop()
에서 stack이 비어있다는 오류가 발생한 것이었다.
어디가 잘못됐는지 한참을 찾아보고 수정해봤는데 한참동안을 헤멨다. 도저히 잘못된 게 없는 것 같은데,,
그러다 혹~시나 해서 sys.stdin.readline()
을 전부 input()
으로 변경했더니 어라..? 에러 해결.. strip()
를 까먹은 것이었다.
sys.stdin.readline()
입력은 개행 문자(\n)를 포함해 문자열을 읽고 input()
입력은 개행 문자를 자동으로 제거한다.
아마도 개행 문자를 포함해 문자열을 읽기 때문에 표기식 문자를 처리할 때 예상치 못한 에러가 발생한 것 같다..
그래서 sys.stdin.readline()
-> sys.stdin.readline().strip()
변경해주고 제출해주니 정답.. 거의 한 시간을 넘게 쓴 나는 바보다..
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import sys
n = int(sys.stdin.readline().strip()) # 피연산자 갯수
expression = sys.stdin.readline().strip() # 후위표기식
num = [int(sys.stdin.readline()) for _ in range(n)]
stack = []
for word in expression:
if word.isalpha():
stack.append(num[ord(word) - ord('A')])
else:
num2 = stack.pop()
num1 = stack.pop()
if word == '+':
stack.append(num1 + num2)
elif word == '-':
stack.append(num1 - num2)
elif word == '*':
stack.append(num1 * num2)
elif word == '/':
stack.append(num1 / num2)
print('%.2f' % stack[0])
Leave a comment