멋쟁이v의 개발일지

[백준 1541번] 잃어버린 괄호(파이썬) 본문

0년차/알고리즘(그리디)

[백준 1541번] 잃어버린 괄호(파이썬)

멋쟁이v 2022. 11. 15. 16:00
728x90
320x100
문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

 

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

 

예제 입력 1
55-50+40
예제 출력 1
-35

 


 

풀이
이 문제는 괄호를 적절히 쳐서 제시된 식의 값을 최소로 만들어야 합니다.

예제를 보면
55-50+40
55-(50+40) => 최솟값
'-'를 기준으로 문자를 끊고 끊어진 수들을 더해 빼주면 되는 문제입니다.
주의해야 할 점은 첫번째 문자가 음수와 양수일때 와 0으로 시작되는 숫자 입니다.

코드를 순서대로 작성한다면
1. '-' 기준으로 나눈 문자의 첫번째 문자를 정수형태(0으로 시작되는 숫자고려)로 저장하고 '+' 기준으로 더하기
2. 만약 첫번째 문자가 '-'이면 빼주고 '+'이면 더해준 값을 정답 변수에 저장
3. 첫번째 이후 문자를 '+' 기준으로 다 더해주고 정답 변수와 빼기
4. 이 과정을 두번째 문자부터( S[1:] ) 반복


작성 코드
S = input().split('-') # 입력된 문자를 '-'기준으로 끊음
answer = 0

X = sum(map(int, (S[0].split('+')))) # S의 첫번째 문자를 정수형태로 하여 '+'기준으로 더하고 저장
if S[0] == '-':  # 만약 첫번째 문자가 '-'로 시작하면 빼기
    answer -= X
else:
    answer += X  # '+'로 시작하면 더하기

for i in S[1:]:  # '-'기준으로 나눈 S를 두번째 인덱스부터 반복
    X = sum(map(int, (i.split('+')))) # 정수형태로 하여 '+'기준으로 더하고 저장
    answer -= X # 더한 값을 정답 변수에 빼주기

print(answer)
728x90
320x100
Comments