문제
1935번: 후위 표기식2
첫째 줄에 피연산자의 개수(1 ≤ N ≤ 26) 가 주어진다. 그리고 둘째 줄에는 후위 표기식이 주어진다. (여기서 피연산자는 A~Z의 영대문자이며, A부터 순서대로 N개의 영대문자만이 사용되며, 길이
www.acmicpc.net
알고리즘
- 입력받은 문자를 대문자인지 확인하여 연산자인지 피연산자인지 확인한다.
- 피연산자이면 아스키코드를 통해 숫자를 입력받는다.
- 연산자일 경우 스택에 맨 위에 있는 두 숫자를 팝하고 eval() 함수를 통해 연산해준다.
- 스택에 쌓인 하나의 숫자를 소수 둘째 자리까지 출력한다.
코드
import sys
n = int(sys.stdin.readline())
c = list(map(str, sys.stdin.readline().strip()))
num = [float(sys.stdin.readline()) for i in range(n)]
stack = []
for i in c:
# 대문자인지 확인
if i.isupper():
# num 에 해당 문자의 아스키코드에 해당하는 index 를 스택에 추가
stack.append(num[ord(i) - ord('A')])
# 대문자가 아니라면 연산자를 통해 연산한다.
else:
# 스택에 맨 위에 두 숫자를 팝한다.
a = stack.pop()
b = stack.pop()
# 팝한 두 숫자를 eval()함수를 통해 연산하고 다시 스택에 넣는다.
stack.append(eval(str(b) + i + str(a)))
# 스텍에 쌓이 하나의 숫자를 소수 둘째 자리까지 출력한다.
print(format(stack[0], ".2f"))
github
GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법
내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 10809번(파이썬): 알파벳 찾기 (0) | 2021.09.13 |
---|---|
[baekjoon] 백준 10808번(파이썬): 알파벳 개수 (0) | 2021.09.12 |
[baekjoon] 백준 17299번(파이썬): 오등큰수 (0) | 2021.09.10 |
[baekjoon] 백준 17298번(파이썬): 오큰수 (0) | 2021.09.09 |
[baekjoon] 백준 10799번(파이썬): 쇠막대기 (0) | 2021.09.08 |