내 풀이

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import sys

#입력
exp = list(sys.stdin.readline().split('-'))
exp = [l.strip() for l in exp]
answer = 0

#계산
for n in exp[0].split('+'):
    answer += int(n)
for n in exp[1:]:
    for s in n.split("+"):
        answer -= int(s)

#출력
print(answer)
  • exp: 수식 입력을 받아와 '-' 로 나누어 list 로 저장

괄호를 칠 때 기호의 순서를 생각했다

  • '-' 뒤에 '+': '+' 전부 다 괄호로 묶어줄때 최소
  • '-' 뒤에 '-': 그대로 계산시 최소
  • '+' 뒤에 '-': 그대로 계산시 최소
  • '+' 뒤에 '+': 그대로 계산시 최소

때문에 받은 수식을 '-'로 나누어 저장하였다.

이 후 '-'로 나눴을때의 첫번째항 은 덧셈하여 answer 에 따로 더한 뒤 나머지 항들은 '+'인자로 split 하여 answer 에서 전부 빼준다

회고

1
2
3
4
5
6
7
8
9
10
11
12
13
import sys

exp = list(sys.stdin.readline().split('-'))
exp = [l.strip().lstrip('0') for l in exp]

print(exp)
answer = 2*eval(exp[0])

for s in exp:
    s = eval(s)
    answer -= s

print(answer)

이 코드는 내가 처음 냈던 코드이다

syntax error가 났는데, 이유는 exp = [l.strip().lstrip(‘0’) for l in exp] 이 부분에서 만약 수식 입력이 0009-0002+0001 이렇게 들어오면 3번째 항인 0001의 전처리가 이루어지지 않아 eval 함수에서 오류가 난다

eval함수 사용을 지양해야 할 것 같다