처음 시도한 코드
math = input().split('-') # '-' 기준 분리
hap = []
for i in math:
if i.isdigit(): # 숫자이면 정수로 바꿔 hap에 저장
hap.append(int(i))
else: # 문자열이면 eval 메소드로 식 계산
hap.append(eval(i))
result = hap[0]
for i in hap[1:]: # hap의 1번 이후 값들을 순차적으로 result에서 빼줌
result -= i
print(result)
eval 메소드를 사용하려 했다.
하지만, math의 요소 i가 '00009 + 00009'와 같은 식이라면 isdigit에서 False로 else문을 실행하게 되어 eval 메소드에서 Syntex Error가 발생한다.
그 이유는 eval 메소드는 0으로 시작하는 숫자는 숫자값으로 인식하기 못하기 때문이다.
정답 코드
math = input().split('-') # '-' 기준 분리
hap = []
for i in math: # '+' 기준 분리하여 합을 구함
temp = list(map(int, i.split('+')))
hap.append(sum(temp))
result = hap[0]
for i in hap[1:]: # hap의 1번 이후 값들을 순차적으로 result에서 빼줌
result -= i
print(result)
math의 요소 i는 연산자가 모두 '+'이므로 '+'를 기준으로 다시 한번 분리해 준다.
분리한 결과를 temp에 저장하고 temp의 누적합을 구한다.
이 누적합은 i의 식을 계산한 것과 같은 결과이다.
누적합의 배열인 hap의 0번 요소를 result로 설정한 뒤, 1번 요소부터 순차적으로 result에서 빼면 구하고자 하는 결괏값을 구할 수 있다.
math, hap, result의 과정을 그림으로 나타내면 아래와 같다.
반응형