[백준/파이썬] 1541번: 잃어버린 괄호

수박강아지·2025년 1월 13일

BAEKJOON

목록 보기
18/174

문제

https://www.acmicpc.net/problem/1541

풀이

  • 양수, '+', '-', 괄호를 이용한 문장이 주어짐
  • 괄호를 적절히 사용하여 최솟값 구하기

괄호를 이용해 최솟값을 구하기 위해선 - 뒤에 있는 양수를 모두 하나로 묶어 계산하면 음수 값이 최대가 된다.

ex) 1020+30+404010 - 20 + 30 + 40 - 40을 괄호 없이 계산하면 2020이 나오지만 - 뒤에 있는 양수를 하나로 묶어 계산(괄호를 사용하여)하면, 10(20+30+40)4010-(20+30+40)-40이 되므로 결과는 120-120이 나오게 된다.

이러한 방식을 이용하기 위해서 -를 기준으로 입력받은 문장을 나누어 주면 된다.

s = input().split('-')

나누어진 문장을 가지고 이번엔 +를 기준으로 각 값을 나눈 후 더하여준다.

sub = []
for i in s:
	cnt = 0
    for j in i.split('+'):
    	cnt += int(j)
    sub.append(cnt)

더한 값을 결과를 구할 배열에 저장하여 처음 값을 제외한 나머지 값을 다 빼주면 된다.

res = sub[0]
for r in res[1:]:
	res -= r

코드

import sys
input = sys.stdin.readline

s = input().strip().split('-')
sub = []

for i in s:
    cnt = 0
    for j in i.split('+'):
        cnt += int(j)
    sub.append(cnt)

res = sub[0]
for r in sub[1:]:
    res -= r
print(res)

다른 코드

더 간단한 풀이가 있길래 참고하면 좋을 것 같아 첨부합니다.
푸르고 개발 블로그

import sys
input = sys.stdin.readline

n = input().strip().split('-')
res = 0

for i in n[0].split('+'):
    res += int(i)

for i in n[1:]:
    for j in i.split('+'):
        res -= int(j)

print(res)

0개의 댓글