Algorithm/Baekjoon

Python 1541번 잃어버린 괄호

@Eeap 2022. 8. 7. 22:11
반응형

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

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

 

수열 문제라서 되게 코드가 간결할줄 알았는데 짜다보니 코드가 점점 길어지는 것 같다ㅏ,,,

먼저 입력으로 주어진 문자열에서

operator와 num을 다른 리스트로 분리하였고 res라는 리스트를 따로 만들어서 - 이후의 숫자를 계산한 값을 넣도록 만들었다.

예를 들어 55-50+40+30+20-30-25 가 입력으로 주어졌을때 리스트가 [55, '-', 140, '-', 30, '-', 25]이런식으로 만들어지도록 코드를 구현했다. 이렇게 된 리스트를 이제 계산만 해주면 최솟값을 쉽게 구할 수 있다.

import sys
input = sys.stdin.readline

inp = str(input())
outp=''
num=[]
op=[]
#op와 num 분리
for i in range(len(inp)):
    if inp[i] == '-':
        num.append(int(outp))
        outp=''
        op.append('-')
    elif inp[i] =='+':
        num.append(int(outp))
        outp = ''
        op.append("+")
    elif inp[i] =='\n':
        num.append(int(outp))
    else:
        outp+=inp[i]

res=[]
def recur(idx,numb):
    prev=numb
    for i in range(idx,len(op)):
        if op[i]=='-':
            res.append(prev)
            res.append("-")
            sum1=recur(i+1,num[i+1])
            return
        else:
            prev+=num[i+1]
    res.append(prev)
    return

recur(0,num[0])
sum=0
pass0=False
for i in range(len(res)):
    if res[i]=="-":
        sum-=res[i+1]
        pass0=True
    else:
        if pass0:
            pass0=False
            continue
        else:
            sum+=res[i]
print(res)
print(sum)
반응형