[백준 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)