1 분 소요

1541번 : 잃어버린 괄호

1541: 잃어버린 괄호

방법 1

  • 컨셉: 최대한 큰 숫자로 뺄셈 수행하기
  • 뺄셈을 기준으로 식 쪼개기
  • 쪼개어진 식에 덧셈 연산 수행하기
    • 쪼갠 식이 가장 첫번째 수인 경우 최종값에서 + 수행
    • 쪼갠 식이 첫번째 수가 아닌 경우 최종값에서 - 수행
import sys
input = sys.stdin.readline

# 뺄셈을 기준으로 식을 쪼갠다
math_str = input().rstrip().split('-')

result = 0

for idx in range(len(math_str)):
    # 쪼갠 식에 + 가 있을 경우, + 연산을 한다
    # (덧셈 식을 하나의 연산 결과로 만드는 작업)
    flag = 0
    if '+' in math_str[idx]:
        flag = 1
        plus_cnt = 0 # 덧셈 최종값
        plus_str = math_str[idx].split('+') # 덧셈 기준으로 식 쪼개기
        for plus in plus_str:
            plus_cnt += int(plus)

    # math_str[idx] 가 덧셈식인 경우
    if flag:
        # 맨 처음 숫자라면 더해준다
        if idx == 0:
            result += plus_cnt
        # 그 외의 경우, 빼준다
        else:
            result -= plus_cnt
    # math_str[idx] 가 단일 숫자인 경우
    else:
        # 맨 처음 숫자라면 더해준다
        if idx == 0:
            result += int(math_str[idx])
        # 그 외의 경우, 뺴준다
        else:
            result -= int(math_str[idx])

print(result)

방법 2 (옳은 풀이)

  • 좀 더 정돈된 풀이. 컨셉은 위와 동일함
  • 맨 처음 있는 덧셈식을 모두 처리한 다음 나머지 덧셈 덩어리들 빼기
import sys
input = sys.stdin.readline

# 뺄셈을 기준으로 식을 쪼갠다
math_str = input().rstrip().split('-')
result = 0

# 맨 처음 덧셈식 연산 처리 (+ 수행)
for num in math_str[0].split('+'):
    result += int(num)
# 나머지 식 연산 처리 (- 수행)
for num_str in math_str[1:]:
    # 덧셈을 기준으로 식 나눠서 뺄셈 수행
    for num in num_str.split('+'):
        result -= int(num)

print(result)