문제
1918번: 후위 표기식
첫째 줄에 중위 표기식이 주어진다. 단 이 수식의 피연산자는 A~Z의 문자로 이루어지며 수식에서 한 번씩만 등장한다. 그리고 -A+B와 같이 -가 가장 앞에 오거나 AB와 같이 *가 생략되는 등의 수식
www.acmicpc.net
알고리즘
- 입력받은 문자를 반복문을 통해 확인한다.
- 피연산자인지 연산자인지 확인한다.
- 연산자라면 '*' 와 '/' 는 스택의 맨 뒤에 요소가 '*' 이거나 '/' 일때까지 반복하여 결과값에 더해준다.
- 나머지 연산자는 스택의 마지막이 '(' 일때까지 반복하여 결과값에 더해준다,
- 마지막에 스택 안에 있는 모든 요소를 팝하여 결과값에 더해준다.
코드
import sys
s = list(map(str, sys.stdin.readline().strip()))
stack = []
res = ""
# 입력받은 문자를 반복문을 통해 확인
for i in s:
# 피연산자인지 확인
if i.isalpha():
res += i
elif i == '(':
stack.append(i)
elif i == '*' or i == '/':
while stack and (stack[-1] == '*' or stack[-1]=='/'):
res += stack.pop()
stack.append(i)
elif i == '+' or i == '-':
while stack and stack[-1] != '(':
res += stack.pop()
stack.append(i)
elif i == ')':
while stack and stack[-1] != '(':
res += stack.pop()
stack.pop()
# 스택안에 남아있는 값을 pop
while stack:
res += stack.pop()
print(res)
github
GitHub - junjange/CodingTest: 내가 푼 코딩 테스트 문제와 해결법
내가 푼 코딩 테스트 문제와 해결법. Contribute to junjange/CodingTest development by creating an account on GitHub.
github.com
'CodingTest > Baekjoon' 카테고리의 다른 글
[baekjoon] 백준 1966번(파이썬): 프린터 큐 (0) | 2021.09.17 |
---|---|
[baekjoon] 백준 10773번(파이썬): 제로 (0) | 2021.09.16 |
[baekjoon] 백준 11656번(파이썬): 접미사 배열 (0) | 2021.09.14 |
[baekjoon] 백준 10824번(파이썬): 네 수 (0) | 2021.09.14 |
[baekjoon] 백준 11655번(파이썬): ROT13 (0) | 2021.09.14 |