세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
첫째 줄에 식이 주어진다. 식은 ‘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문을 많이 쓰게만든 문제, 더 간단한 조건 알아보기