[백준] 1541번 - 잃어버린 괄호

야금야금 공부·2023년 4월 3일
0

백준

목록 보기
5/52

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

문제

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

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

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

입력

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

출력

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


문제 풀이

  • '-'가 나올 경우, 다음 마이너스가 나올 때까지, 수를 더한다.
  • 만약 다음에 마이너스가 나오지 않는다면, 계속 더한 수를 빼준다.
  • 최솟값을 구해야 하기 때문에 모두 더한 후, 마지막에 한번 빼주는 형태

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

for i in s[0].split('+'):
    ans += int(i)

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

print(ans)

다른 풀이

  • 아래 참고 블로그에서 가져온 코드
  • 비슷하지만 자세히 풀이한 코드 같아서 가져왔다.
exp = input().split('-')      # '-'를 기준으로 split해서 exp 리스트에 저장

num = []                      # '-'로 나눈 항들의 합을 저장할 리스트

for i in exp:
    sum = 0
    tmp = i.split('+')        # 덧셈을 하기 위해서 '+'를 기준으로 split
    for j in tmp:             # split한 리스트의 각 요소들을 더해줌
        sum += int(j)
    num.append(sum)           # 각 항의 연산 결과(덧셈)를 num에 저장

n = num[0] #식의 제일 처음은 숫자로 시작하기 때문에 0번째 값에서 나머지 값들을 빼준다

for i in range(1,len(num)):   # 1번째 값부터 n에서 빼준다
    n -= num[i]
print(n)

참고 블로그

0개의 댓글