TIL) 1541 잃어버린 괄호

Mongle·2021년 1월 2일
0
post-thumbnail

이 포스팅은,
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)

시간과 메모리 소요량은 같다. 하지만 코드가 더 직관적이고 이해하기 쉽다.

profile
https://github.com/Jeongseo21

0개의 댓글

관련 채용 정보