[백준] 1541 잃어버린 괄호

J. Hwang·2025년 1월 10일
0

coding test

목록 보기
77/108

문제

세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.


입력

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.


출력

첫째 줄에 정답을 출력한다.


내 풀이

import sys
input = sys.stdin.readline

eq = input()

split1 = eq.split('-')
first = split1[0]
if eq[0:len(first)]==first:
    split1.remove(first)

eval1 = [eval(x) for x in split1]

answer = eval(first)
for x in eval1:
    answer -= x

print(answer)

처음에는 위 코드처럼 풀었지만 eval()'0009'와 같은 케이스는 대응하지 못했다...무조건 자료형을 int로 바꿔서 푸는 것이 중요한 듯. 아래는 int로 바꾸어서 정답을 받은 코드

import sys
input = sys.stdin.readline

eq = input()

nums = []

split1 = eq.split('-')

for x in split1:
    x1 = x.split('+')
    sum1 = 0
    for y in x1:
        y1 = int(y)
        sum1 += y1
    nums.append(sum1)        

answer = nums[0]
for i in range(1, len(nums)):
    answer -= nums[i]
    
print(answer)

코멘트

- 숫자 + 숫자를 찾아내 거기에 괄호를 씌우면 큰 음수를 만들 수 있으므로 (ex) -50+40 → -(50+40) = -90) split을 적절히 활용하여 풀면 되는 문제이다.


References

https://www.acmicpc.net/problem/1541
https://sodehdt-ldkt.tistory.com/49

profile
Let it code

0개의 댓글