소스 코드
for tc in range(10):
# tc의 길이
n = int(input())
# 계산식
board = list(map(str,input()))
# 연산자 + * 저장
cal = []
# 숫자 저장
num = []
for q in board:
if q == '+' or q == '*':
cal.append(q)
else:
num.append(int(q))
# 결과
res = 0
# '*' 연산으로 나온 값을 저장
temp = 1
for w in range(int(n/2)):
if w != int(n/2)-1:
# 3 + a + b의 경우
# 앞의 3이 a에 영향을 미치지 않으므로 res에 a를 더하면 됨
# 그러나 3 * a + b의 경우
# a가 앞의 3과의 연산에서 영향을 받으므로 temp에 a를 곱하고
# 그 값을 res에 더하면 됨(그 후 temp 초기화)
if cal[w] == '+':
if temp != 1:
temp *= num[w]
res += temp
temp = 1
else:
res += num[w]
# 연산자가 '*'인 경우 바로 res에 값을 추가하지 않고 temp에 저장
# 이는 * 연산이 언제 끝나는지에 대한 정보가 없기 때문
else:
temp *= num[w]
# w == int(n/2)-1 인 경우
# num[w+1] 뒤에 연산자가 존재하지 않음
# 따라서 cal[w] 연산자에 따라 num[w+1]을 따로 처리해줘야 함
else:
if cal[w] == '+':
if temp != 1:
temp *= num[w]
res += temp
else:
res += num[w]
res += num[w + 1]
else:
temp *= num[w] * num[w+1]
res += temp
print('#{} {}'.format(tc+1,res))
해결 방법
1. 예시에 나와있는 것처럼 후위표기식을 사용할 필요 없다고 판단
2. 순서대로 계산하고 * 연산의 경우 한번에 끝내는 것이 아닌 + 연산자가 나올 때까지 * 연산을 반복함
느낀 점
최근 바빠서 문제를 풀 기회가 적었는데 이제 최대한 시간이 될 때에는 한 문제씩이라도 풀어야겠다
ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.
오류나 적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.
혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.
'코딩 문제해결 > 문제 풀이.SWEA' 카테고리의 다른 글
[SWEA 코딩] S/W 문제해결 응용 행렬찾기 - PYTHON #1258 (0) | 2021.04.12 |
---|---|
[SWEA 코딩] S/W 문제해결 기본 Contact - PYTHON #1238 (0) | 2021.04.10 |
[SWEA 코딩] 크루즈 컨트롤 - PYTHON #11592 (0) | 2021.03.28 |
[SWEA 코딩] 테네스의 특별한 소수 - PYTHON #4698 (0) | 2021.03.20 |
[SWEA 코딩] 진수의 홀수 약수 - PYTHON #5213 (0) | 2021.03.19 |