티스토리 뷰

728x90
반응형

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

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

 

 

내 풀이

from collections import deque
line = input().split('-')

res = 0
for i in range(len(line)):
    
    lst = list(map(int,str(line[i]).split('+')))
    if i==0:
        res+=sum(lst)
    else:
        res-=sum(lst)
print(res)

 

식의 최소값은, - 다음에 오는 식이 괄호로 묶일 때 발생한다.

예를 들어, 55-33+40 인 경우, 55-(30+40) 이 최솟값이고,

10+20-30-40+50 의 경우, 10+20-(30)-(40+50) 이 최솟값이 된다.

 

따라서, 마이너스 부호를 기준으로 식을 나눠주었다.

이번엔 플러스 부호를 기준으로 식을 나눌 차례이다.

line[i]는 split된 이후이므로 데이터 타입이 리스트이다. 따라서, 문자열로 변환 후 +를 기준으로 나누어 lst에 넣어주었다.

식의 첫번째 숫자는 무조건 앙수이므로 i가 0일때는 res에 lst의 합을 더했다. (예시. 식이 '10+20-30-40+50' 인 경우, 10+20의 결과값을 res에 더함)

처음에 - 를 기준으로 나누었기 때문에, 첫번째 원소가 아니라면 무조건 res에서 lst의 합을 빼준다. 

 

예시로 코드를 더 쉽게 이해해보자.

 


예시

식이 10+20-30-40+50 인 경우, 

 

1) - 부호 기준으로 split

 line = [[10+20], [30], [40+50]] 

 

2) line의 원소를 순회하며 + 기준으로 split 

첫번째 lst : [[10], [20]] 

두번째 lst: [[30]]

세번째 lst : [[40], [50]]

 

3) 위의 lst의 원소 순회하며 값 구하기

첫번째 lst : 첫번째 이므로 res에 sum(lst) 더하기

따라서 res+=30 이므로 res는 30

두번째 lst: 첫번째가 아니므로 sum(lst) res에서 뺴기

res-=30 이므로 res = 0

세번째 lst: res에서 sum(lst) 빼기

res-=90이므로 res = -90

 

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함