이 포스팅은,
1. 미래의 내가 다시 이 문제를 풀고자 할 때 과거의 내가 어떻게 문제를 해결했었는지 알려주기 위해서
2. 같은 문제를 풀고 있는 사람에게 아이디어를 제공하기 위해서
작성되었습니다.
백준 1541 잃어버린 괄호 : https://www.acmicpc.net/problem/1541
💡 아이디어
- '-'를 기준으로 식을 나눈다. expression.split('-')
- eval() 함수는 0으로 시작하는 숫자를 처리할 수 없다. ex)04+05->error
처음에 eval 함수로 문제를 해결했는데 계속 런타임 에러가 발생했다. eval() 함수가 0으로 시작하는 숫자를 처리하지 못한다니 놀랍다.
import sys
input = sys.stdin.readline
expression = list(input().strip().split('-'))
answer = 0
for i in range(len(expression)):
if '+' in expression[i]:
nums = expression[i].split('+')
temp = 0
for num in nums:
temp += int(num)
expression[i] = temp
for i in range(len(expression)):
if i == 0:
answer += int(expression[i])
else:
answer -= int(expression[i])
print(answer)
처음에 문제 이해를 잘못했었다. 괄호가 딱 한번만 만들어질 수 있는 줄 알고
- '-'가 하나이면 '-' 뒤로 전체 괄호
- '-'가 두 개 이상이면 '-'와 '-' 사이의 숫자를 더한 값 중 max값에 괄호
라고 생각했었다. 하지만 괄호가 여러번 만들어 질 수 있는 문제였기 때문에 경우를 나눌 필요 없이 '-'를 기준으로 식을 나누고 첫번째를 제외한 모든 수를 빼주면 된다.
s = input().split('-')
cnt = 0
for ch in s[0].split('+'):
cnt += int(ch)
for ch in s[1:]:
for c in ch.split('+'):
cnt -= int(c)
print(cnt)
시간과 메모리 소요량은 같다. 하지만 코드가 더 직관적이고 이해하기 쉽다.