상세 컨텐츠

본문 제목

백준 잃어버린 괄호 파이썬

프로그래밍/백준풀이

by 아싸호랑나비 2022. 8. 20. 19:14

본문

문제링크

괄호가 들어감으로써 답이 달라지는 경우는 어떨 떄일까?

 

괄호를 넣지 않았을경우

55-50+40=45

괄호를 넣었을경우

55-(50+45)=-35

 

즉 -가 오고 그후에 +가 오면 무조건 괄호로 묶는게 이득이다

 

따라서 묶는 조건은 -후에 +가 왔을때

 

그후에 +가 올경우 괄호를 확장할수있다

1-(2+3+4)

-가 올경우 괄호를 닫는다

1-(2+3)-4

 

연산중에 -가 한번이라도 나오면 그뒤에는 어떤 연산부호든지 관계없이 모두 뺄셈으로 계산된다는것을 발견했다

예를들어 

1-2+3-4+5-6+7-8+9 라는 수식이 있다고 해보자 괄호로 묶으면

1-(2+3)-(4+5)-(6+7)-(8+9)가 된다

이부분은 노트에 몇번 끄적여보면 누구나 납득하게 될것이다

하지만 이렇게 간단하게 풀수있다고? 

일단 구현해보았다

exp='+'+input()
num_list=[]
for i in range(1,len(exp)):
    if exp[i].isdigit():
        if not exp[i-1].isdigit():
            a=i


    elif exp[i-1].isdigit():
        if not exp[i].isdigit():
            if exp[a-1]=='+':
                num_list.append(int(exp[a:i]))
            else:
                num_list.append(int(exp[a:i])*-1)

if exp[a-1]=='+':
    num_list.append(int(exp[a:len(exp)]))
else:
    num_list.append(int(exp[a:len(exp)])*-1)

for i in range(1, len(num_list)):
    if num_list[i-1]<0:
        if num_list[i] >= 0:
            num_list[i]=num_list[i]*-1

print(sum(num_list))

맞았다 전처리를 하지않고 줘서 조금 당황했지만 그래도 풀어냈다

정규표현식으로 풀까했지만 잘 모르기도 하고 지원안해줄것같아서 그냥 풀었다

 

솔직히 1트만에 맞출줄몰라서 놀랬다

 

'프로그래밍 > 백준풀이' 카테고리의 다른 글

백준 스택 파이썬  (0) 2022.08.21
백준 주유소 파이썬  (0) 2022.08.21
백준 회의실 배정 파이썬  (0) 2022.08.15
그리디 알고리즘의 이해 파이썬  (0) 2022.08.13
백준 나머지합 파이썬  (0) 2022.08.09

관련글 더보기