Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- 인프콘 2024
- 전략패턴 #StrategyPattern #디자인패턴
- spring batch 5.0
- 1주일회고
- 빈 조회 2개 이상
- 파이썬
- 개발자부트캠프추천
- 프로그래머스 이중우선순위큐
- jwt
- 단기개발자코스
- 커스텀 헤더
- 코딩테스트 준비
- JavaScript
- KPT회고
- Spring multimodule
- jwttoken
- 99클럽
- 프로그래머스
- infcon 2024
- 빈 충돌
- DesignPattern
- Python
- 취업리부트코스
- 디자인 패턴
- TiL
- 구글 OAuth login
- 개발자 취업
- @FeignClient
- 항해99
- 디자인패턴
Archives
- Today
- Total
m1ndy5's coding blog
[자료구조] 백준 1935번 후위 표기식2 with python 본문
https://www.acmicpc.net/problem/1935
이 문제는 먼저 코드를 보기전에 후위 표기식이란 무엇인지를 알아야한다.
예를 들어 (A+B) * 2 + B/C 라는 식을 트리 형식으로 나타내보자.
이런 형식이 될 것이고
후위 표기식은 left => right => center 순으로 읽으면 된다.
따라서 위 식을 후위 표기식으로 표현하면 A B + 2 * B C / + 가 된다.
반대로 후위 표기식으로 표현된 식을 계산하는 방법은
숫자일 때는 스택에 push하고 연산자가 나오면 숫자 두개를 pop해 연산을 진행한 후 다시 스택에 push하는 것이다.
이 때 중요한 것이 +나 * 는 상관없지만 -나 / 같은 경우 뒤의 숫자가 먼저 나오므로 순서에 유의하여 문제를 풀어야한다.
import sys
alphabet = ['A', 'B', 'C', 'D', 'E', 'F', 'G' ,'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
dic = {}
stack = []
n = int(sys.stdin.readline().rstrip())
expression = sys.stdin.readline().rstrip()
for i in range(n):
k = int(sys.stdin.readline().rstrip())
dic[alphabet[i]] = k
for ele in expression:
if ele in alphabet:
stack.append(dic[ele])
else :
a = stack.pop()
b = stack.pop()
if ele == '+' :
c = a+b
elif ele == '-':
c = b-a
elif ele == '*':
c = a*b
else :
c = b/a
stack.append(c)
print('%.2f'%stack.pop())
'알고리즘 with python > 자료구조' 카테고리의 다른 글
[자료구조]백준 1874번 스택 수열 with Python (0) | 2023.03.22 |
---|---|
[자료구조] 백준 1406번 에디터 with Python (0) | 2023.03.22 |
[자료구조] 백준 10773번 제로 with python (0) | 2023.03.22 |
[자료구조] 백준 9012번 괄호 with Python (0) | 2023.03.20 |
[자료구조] 백준 10828번 스택 with Python (0) | 2023.03.20 |