[백준 1541] 잃어버린괄호

정예인·2022년 9월 4일
0

python

목록 보기
3/5

문제

세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.

그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.

괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

입력

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

출력

첫째 줄에 정답을 출력한다.

풀이

부등호를 넣어주는 리스트와 값을 넣어주는 리스트를 따로 만들어준다. 처음 for문에서는 값을 int로 바꿔주기위해 ex에서 숫자일 경우 문자열로 묶어 저장해준 후 int로 변환하여 값을 넣어주는 리스트에 넣어준다. 부등호일 시, 부등호를 넣기위해 만든 리스트에 저장, 첫 값은 plus에 저장시키고 pop을 이용해 빼준다.

#1541번
ex = input()
ex_list,ineq = [],[]
ex_num = ''

for i in ex :
    if i.isdigit():                 # 값이 숫자면 ex_num문자열에 i 더해주기
        ex_num += i
    else :
        ex_list.append(int(ex_num)) # 숫자 아닐 시, ex_num 문자열에 모은 값 int값으로 변형해서 ex_list에 넣어주기
        ineq.append(i)              # 해당 i는 ineq리스트에 넣어주기
        ex_num = ''                 # ex_num 초기화

ex_list.append(int(ex_num))
plus,minus = ex_list.pop(0),0

for i in range(len(ex_list)):       
    if ineq[i] == '-':              # ineq가 -일 경우
        if minus :                  # minus가 양의 값이면 plus에 넣어주고 초기화
            plus -= minus
            minus = 0
            minus += ex_list[i]
        else :                      # minus가 0일 시, minus에 값 채워주기
            minus += ex_list[i]
    else :
        if minus :                  # + 단위일 때, minus가 양수면 minus에 계속 채워주기
            minus += ex_list[i]
        else :                      # 0일 시, plus값에 계속 더해주기
            plus += ex_list[i]
print(plus-minus)

후기

생각보다 if문을 많이 쓰게만든 문제, 더 간단한 조건 알아보기

profile
hello velog :)

0개의 댓글