Skip to content
CatBus
Go back

[BOJ] 잃어버린 괄호 - 1541 (S2)

시간 제한메모리 제한
2초128 MB

문제

세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.

그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.

괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

입력

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

출력

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

풀이

입력되는 부호는 ‘+’, ‘-’ 뿐이기 때문에, 최소를 만들 수 있는 방법은 간단하게 구할 수 있다.

‘-’가 등장하지 않으면 무조건 더할 수 밖에 없다.

하지만 ‘-’가 등장하는 순간부터는 괄호를 이용하여 무조건 후에 나오는 수를 뺄셈으로 만들 수 있다.

예를 들면 55-50+40+90-100+10-11 이라는 수식이 입력됐을 때 55-(50+40+90)-(100+10)-11 = 55-50-40-90-100-10-11 로 만들 수 있다.

코드

st = input().strip()+ '+'
total = 0
minus = False
num = ''
for c in st:
    if c.isdigit():
        num += c
    else:
        if minus:
            total -= int(num)
        else:
            total += int(num)
        if c == '-':
            minus = True
            
        num = ''
print(total)

입력은 숫자와 부호가 섞인 문자열로 주어지기 때문에 그 문자열을 확인하면서 문자가 숫자인지 부호인지에 때라 다르게 처리를 해주어야 한다.

  1. 숫자

    부호가 들어오기 전까지 하나의 숫자이기 때문에 문자열로 계속 이어준다.

    만약 ‘-’ 부호가 한 번도 나오지 않았다면 더할 수 밖에 없으므로 결과가 저장될 total에 정수로 이전까지 만들어 놓은 문자열을 정수로 바꿔 더한다.

    ‘-’가 등장한 순간부터는 무조건 빼면 되기 때문에 minus 변수를 True로 바꿔준다.

    이후의 연산은 minus가 True이기 때문에 이전까지 만들어 놓은 문자열을 정수로 바꿔 뺀다.


Share this post:

비슷한 글

1541이 글—

본문을 Xenova/multilingual-e5-small 로 임베딩하고, 그 벡터를 PCA 로 32축에 눌러 왼쪽 막대로 그렸습니다. 비슷한 글은 지문도 닮습니다 — 위아래를 견줘 보세요. 계산은 빌드 때 끝나고 벡터는 브라우저로 오지 않습니다.

Previous Post
[BOJ] 회의실 배정 - 1931 (S1)
Next Post
[BOJ] 신입 사원 - 1946 (S1)