728x90
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV14nnAaAFACFAYD
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
< 📝 문제 >
문자열로 이루어진 계산식이 주어질 때, 이 계산식을 후위 표기식으로 바꾸어 계산하는 프로그램을 작성하시오.
예를 들어
“3+4+5*6+7”
라는 문자열로 된 계산식을 후위 표기식으로 바꾸면 다음과 같다.
"34+56*+7+"
변환된 식을 계산하면 44를 얻을 수 있다.
문자열 계산식을 구성하는 연산자는 +, * 두 종류이며 피연산자인 숫자는 0 ~ 9의 정수만 주어진다.
< ❓ 생각 >
< 💻 코드 >
for tc in range(1,11):
# 테스트 케이스의 길이
T = int(input())
# 테스트 케이스
TC = list(input())
# 1. 후위 표기식으로 바꾸기
priority = {'*':2, '+':1}
result_ls = []
stack = []
for i in TC:
# 숫자면 결과에 넣기
if i != '*' and i != '+':
result_ls.append(i)
# '*' or '+'
else:
# 스택이 비어있으면
if not stack:
stack.append(i)
# 스택이 비어있지 않으면
else:
# stack[-1] 보다 우선순위가 낮다면 stack에 있는 연산자 다 빼내기
if priority[stack[-1]] >= priority[i]:
while stack and priority[stack[-1]] >= priority[i]:
result_ls.append(stack.pop())
stack.append(i)
# 남아있는 연산자 모두 넣기
while stack:
result_ls.append(stack.pop())
# 2. 계산하기
result = []
i = 0
for i in result_ls:
if i != '*' and i != '+':
result.append(i)
elif i == '+':
result[-2] = int(result[-2]) + int(result[-1])
result.pop()
else:
result[-2] = int(result[-2]) * int(result[-1])
result.pop()
print(f'#{tc} {result[0]}')
문제 제대로 안 읽어서 후위표기식 없이 만든 코드
for tc in range(1,11):
# 테스트 케이스의 길이
T = int(input())
# 테스트 케이스
TC = list(input())
# *는 바로 계산하고 +기다렸다 마지막에 계산
stack = []
i = 0
while i < T:
# 숫자와 '+'를 stack에 넣기
if TC[i] != '*':
# '+'일때 stack안에 이미 '+' 있으면 이전 '+' 계산
if len(stack) > 1 and stack[-2] == '+':
stack[-3] = int(stack[-3]) + int(stack[-1])
# '+'와 더한 숫자 지우기
stack.pop()
stack.pop()
stack.append(TC[i])
i += 1
# '*'면 바로 계산
elif TC[i] == '*':
stack[-1] = int(stack[-1]) * int(TC[i + 1])
i += 2
# 다 넣고 나면 a + b 형태로 3개가 남음
# 마지막 연산
result = int(stack[0]) + int(stack[2])
print(f'#{tc} {result}')
728x90
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
[SWEA] 11315. 오목 판정 - Python (0) | 2022.02.24 |
---|---|
[SWEA] 1220. Magnetic - Python (0) | 2022.02.24 |
[SWEA] 2005. 파스칼의 삼각형 - Python (0) | 2022.02.22 |
[SWEA] 4873. 반복문자 지우기 - Python (0) | 2022.02.22 |
[SWEA] 4866. 괄호검사 - Python (0) | 2022.02.22 |
댓글