백준15815 - 천재 수학자 성필 (스택) Python 본문
반응형
https://www.acmicpc.net/problem/15815
해당 문제는 '후위 표기식'을 연산하는 문제다.
문제에서 말하는 설명을 이해하면 후위 표기식은 우선 순위에 따라 이미 정렬된 문자열을 다루는 것이기 때문에
abc*+ 의 경우, b * c 를 먼저 처리한 뒤 a + (b * c)를 하여 값을 연산한다고 볼 수 있다.
그리고 이는 스택으로 풀이가 가능한데, 빈 스택에 연산자가 들어오기 전까지 스택에 정수를 추가하다가,
연산자가 들어올 경우 스택 마지막에 위치한 두 정수를 꺼내 연산한 뒤 다시 스택에 넣어주는 과정을 반복하는 방식으로 풀이가 가능하다.
문제 풀이 방식
import sys
data_temp = sys.stdin if sys.platform == 'linux' else open('입력.txt', 'r')
input_data = data_temp.read().rstrip()
def solution (data) :
stack = []
# 반복문 내에서 if문을 사용하는 방식대신, 딕셔너리에 함수를 저장하여 처리
table = {
('+') : lambda x,y : x + y,
('-') : lambda x,y : x - y,
('*') : lambda x,y : x * y,
('/') : lambda x,y : x // y
}
for v in data :
if v.isdigit() :
stack.append(int(v))
else :
a,b = stack.pop(),stack.pop()
stack.append(table[v](b,a))
print(stack[0])
solution(input_data)
반응형
'개발 > algorithm' 카테고리의 다른 글
백준12789 - 도키도키 간식드리미 (스택) Python (0) | 2023.11.13 |
---|---|
백준1935 - 후위 표기식 2 (스택) Python (1) | 2023.11.12 |
백준2713 - 규현이의 사랑을 담은 문자메시지 Python (0) | 2023.11.10 |
프로그래머스 Lv.3 - 거스름돈 (DP) Python (1) | 2023.11.09 |
백준11053 - 가장 긴 증가하는 부분 수열 (DP) Python (0) | 2023.11.08 |
Comments