본문 바로가기
Python3/백준 알고리즘

2022.03.10 [백준] (python 파이썬) 잃어버린 괄호

by ian's coding 2022. 3. 10.
728x90
반응형

 

 

 

 

 

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

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

 


풀이

이 문제는 언제 괄호를 넣어야 가장 작은 값이 나오는지 찾는 문제이다. 

이 문제의 키는 괄호를 '-'가 시작되고나서 열고 다음 '-'가 나올때 닫는것이다. 그래야 -부호가 나왔을때 가장 작은 숫자를 만들 수 있기 때문이다. 

예를 들면 s=1+2+3-1+5+3-3+2라는 문자열이 주어졌으면 1+2+3-(1+5+3)-(3+2) 다음과 같이 괄호를 쳐야 가장 작은 값을 가질 수 있다. 만약 괄호안에 -부호가 있으면 괄호안의 숫자에 더하는 꼴이 되기 때문에 괄호안은 +부호만 있고 괄호의 앞이 -부호가 되야 최소값을 가질 수 있다. 

그래서 위의 방법으로 코드를 작성했다.

  • 우선 문자열을 '-'로 잘라 배열에 저장한다.
  • 그리고 배열의 첫번째 인덱스를 꺼내 다시 '+'로 잘라 first배열에 저장한다.
  • 첫번째 인덱스는 +이기 때문에 ans에 각 인덱스를 더해준다.
  • 그리고 s배열의 길이가 0보다 크면 이후 담긴 인덱스는 '-'부호를 가진 괄호이기 때문에 +로 잘라준 뒤 ans에 빼준다.
1
2
3
4
5
6
7
8
9
10
11
s=input().split('-')
ans=0
first=s.pop(0).split('+')
for i in first:
    ans+=int(i)
if len(s)>0:
    for i in s:
        i=i.split('+')
        for j in i:
            ans-=int(j)
print(ans)
cs

 

 

 

 

728x90
반응형

댓글