문제 링크
https://www.acmicpc.net/problem/1918
1918번: 후위 표기식
첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 알파벳 대문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의
www.acmicpc.net
풀이 - 다른 블로그 참고
- 처음엔 트리 문제인 줄 알았는데 stack을 사용하는 문제
입력으로 들어온 문자열의 문자들에 대하여
1. 문자가 알파벳이면 ans에 추가
2. 문자가 연산자라면
연산자의 우선순위가
1. '(', ')'
2. '*', '/'
3. '+', '-' 이므로
1) '(' 일 때 stack에 추가
2) ')'일 때 stack에 문자가 있고, stack의 마지막 문자가 '('이 아닐 때까지 스택에 있는 연산자들 pop하여 ans에 추가
'(' 제거를 위해 한 번 더 pop
3) '*', '/' 일 때
같은 연산자 우선순위인 '*'나 '/'가 나올 때까지 스택에 있는 연산자들 pop하여 ans에 추가
현재 연산자 스택에 추가
4) '+', '-' 일 때
가장 낮은 우선순위이므로 자신보다 우선순위 높은 것들 모두 pop하여 ans에 추가
3. 스택에 남은 연산자들 ans 에 추가
4. 출력
s = list(input())
stack = []
ans = ""
for i in s:
if i.isalpha():
ans += i
else :
if i == '(':
stack.append(i)
elif i == ')':
while stack and stack[-1] != '(':
ans += stack.pop()
stack.pop()
elif i == '*' or i =='/':
while stack and (stack[-1] =='*' or stack[-1] =='/' ):
ans += stack.pop()
stack.append(i)
elif i == '+' or i == '-':
while stack and stack[-1] != '(':
ans += stack.pop()
stack.append(i)
while stack:
ans += stack.pop()
print(ans)
'개발 > algorithm' 카테고리의 다른 글
[백준 2263번] 트리의 순회 - python (0) | 2022.03.18 |
---|---|
[백준 11779번] 최소비용 구하기 2 - python (0) | 2022.03.18 |
[백준 5639번] 이진 검색 트리 - python (0) | 2022.03.18 |
[백준 2448번] 별 찍기 - 11 - python (0) | 2022.03.18 |
[백준 2447번] 별 찍기 - 10 - python (0) | 2022.03.17 |