상세 컨텐츠

본문 제목

[백준/파이썬]1541 잃어버린 괄호

알고리즘 문제풀이

by 한백인데용 2023. 6. 9. 16:38

본문

728x90
반응형

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

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

문제

 

식에서 적절하게 괄호를 넣어 가장 작은 숫자를 만들면 되는 문제다.

 

그리디 문제라 간단한 규칙만 찾으면 되는 문제다.

 

55-50+40

예시 입력이 이렇게 있을 때,

 

 

-가 나오기 전에 나왔던 모든 숫자들을 더해서

-가 나온 순간부터 뒤에 있는 모든 숫자들의 합을 빼면 된다.

 

정답

import re
num = input()
plus_minus = []
for c in num :
    if not c.isdigit() :
        plus_minus.append(c)
num = re.split('[+|-]', num)

plus_minus_index = 0

minus = []
plus = []
minus_bool = False

for i in range(len(num)) :
    if i == 0 :
        plus.append(int(num[i]))
    else :
        if plus_minus[plus_minus_index] == '+' and not minus_bool:
            plus.append(int(num[i]))
            plus_minus_index+=1
        elif plus_minus[plus_minus_index] == '+' :
            if minus_bool :
                minus.append(int(num[i]))
                plus_minus_index+=1
        elif plus_minus[plus_minus_index] == '-' :
            minus.append(int(num[i]))
            minus_bool = True
            plus_minus_index+=1

print(sum(plus)-sum(minus))

좀 더 쉽게 풀 수 있을 거 같은데.. 코드가 볼 맛이 안 난다...

 

우선 입력 값을 가공해 준다.

55-50+40

입력이 주어지면

 

숫자는 숫자대로

부호는 부호대로 리스트에 저장해 준다.

num = input()
plus_minus = []
for c in num :
    if not c.isdigit() :
        plus_minus.append(c)
num = re.split('[+|-]', num)

이 코드다.

 

그다음 위에서 말했던 대로 알고리즘을 짜면 된다.

 


끝!

728x90
반응형

관련글 더보기