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 | 29 | 30 | 31 |
Tags
- 그래프탐색
- 거리두기확인하기
- DP
- 17404
- 알고리즘
- DFS
- 구현
- 트리의지름
- 프로그래머스
- 파이썬
- 파괴되지않은건물
- RGB거리2
- 두큐합같게만들기
- 도넛과막대그래프
- 프림알고리즘
- 큐
- 섬연결하기
- 위상정렬
- javascript
- 자물쇠와열쇠
- 다익스트라
- 징검다리건너기
- [1차]캐시
- 최단경로
- 이모티콘할인행사
- 최소스패닝트리
- 사이클게임
- 백준
- BFS
- 벽부수고이동하기
Archives
- Today
- Total
블로그 이름 뭐로 하지
[알고리즘] 백준 1918 - 후위 표기식 본문
문제
https://www.acmicpc.net/problem/1918
1918번: 후위 표기식
첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의
www.acmicpc.net
풀이
내가 스스로 못 푼 문제 ^ ___ ^ 사실 이런 연산식과 관련된 문제 나오면 얼어버리는 습관(...)이 있다. 내가 잘 못 풀기 때문. 스택 문제라는건 알았는데 어떻게 구현을 해야할지 떠올리지를 못했다. 쩝 ㅠ . ㅠ
앞에서부터 요소를 탐색하는데 피연산자가 나오면 바로 answer에 더해주고, 연산자가 나오면 stack에 넣어주는 방식이다. stack에 넣어주기 전에 이전에 나온 연산자들(stack에 쌓여있는) 중에서 우선순위를 따지고 answer에 추가해준다. 마지막 else문은 닫는 괄호가 나왔을 경우로, 이 때는 스택에 쌓인 모든 연산자 + 괄호들을 소진해줘야 한다. (왜냐하면 괄호보다 높은 우선순위를 가진 연산자는 없으니까)
풀이를 보고 대강 이해하긴 했는데 이걸 어떻게 혼자 스스로 생각하지...
코드
input_str = input()
answer = ""
stack = []
for a in input_str:
if a.isalpha():
answer+=a
elif a == "(":
stack.append(a)
elif a=="*" or a=="/":
while stack and (stack[-1] == "*" or stack[-1] == "/"):
answer+=stack.pop()
stack.append(a)
elif a=="+" or a=="-":
while stack and stack[-1] != "(":
answer+=stack.pop()
stack.append(a)
else:
while stack and stack[-1] != "(":
answer+=stack.pop()
stack.pop()
while stack: # 남아 있는 문자 정답으로 추가하기
answer += stack.pop()
print(answer)
'알고리즘' 카테고리의 다른 글
[알고리즘] 프로그래머스 - 괄호 변환 (0) | 2024.01.09 |
---|---|
[알고리즘] 프로그래머스 - 타겟넘버 (0) | 2024.01.09 |
[알고리즘] 백준 1932 - 정수 삼각형 (1) | 2024.01.08 |
[알고리즘] 프로그래머스 - 합승 택시 요금 (1) | 2024.01.07 |
[알고리즘] 프로그래머스 - 피로도 (0) | 2024.01.06 |