본문 바로가기

Algorithm/String

(Python) - 백준(BOJ) 1541번 : 잃어버린 괄호 답

반응형

www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

문자열을 parsing하고 수학적으로 최소값을 구하는 문제였습니다.

 

풀이방법 

 

 1. '-'를 기준으로 식들을 나눈다.

문제의 예제를 예시) 55-50+40 인 경우 [55,50+40]이 됩니다.

 2. 처음 식 ('-'로 나눈 후 배열의 첫번째 원소)은 '+'가 포함되어 있을 수 있으니 '+'를 기준으로 split한 뒤 나온 배열의 모든 원소를 더해 처음 식의 결과 값을 구합니다. 그 후 답 변수인 ans의 초기값을 해당값으로 배정해 줍니다.

 3. 처음 식 다음의 배열을 시작으로 배열의 길이 끝까지 모두 돌며 한번 loop를 진행 시 => +가 포함된 식은 다시 '+'를 기점으로 나누어준 뒤 나온 배열의 원소들을 모두 각자 더해준 뒤에 답변수인 ans에서 빼주시면 됩니다.

 4.'-'를 기준으로 나누어 줄 때 -12가 첫원소라면 ['',12]로 parsing되므로 해당 논리가 틀렸다 라고 생각할 수 있지만 애초에 양수를 입력받으므로 고려할 필요가 없습니다.

 

Code

expression = input()
arr = expression.split('-')
ans = 0
parsedFirstExpArr = arr[0].split('+')

for i in range(0,len(parsedFirstExpArr)): 
    ans += int(parsedFirstExpArr[i]) 

for i in range(1,len(arr)):
    plus = arr[i].split('+')
    sum = 0
    for j in range(len(plus)):
        sum += int(plus[j])
    ans -= sum

print(ans)