코테 공부/백준
[Python] 1541 잃어버린 괄호
prefer_all
2022. 9. 16. 19:59
문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
예제 입력 | 예제 출력 |
55-50+40 | -35 |
10+20+30+40 | 100 |
00009-0009 | 0 |
풀이
핵심은 덧셈 부분을 먼저 계산하는 것
1. 뺄셈(-)을 기준으로 1차적으로 문자열을 분리해준다.
2. 분리된 문자열들 각각에 포함 된 정수 값들을 모두 더 해준다.
3. 각각 더해진 값들을 뺄셈해준다.
이때 주의해야할 점은 첫번째 수는 양수여야함
그리고 첫 번째 값도 +가 있는 지 여부를 따져야함 (55-50+40의 경우 ['55', '40+3'] 이지만 10+20+30+40은 ['10+20+30+40'])
# *** 문제: 10+20+30이 입력값이면 arr[0]이 10+20+30
arr = input().split('-') # 55-40+3 -> ['55', '40+3']
sum = int(arr[0]) # ***
for i in range(1, len(arr)):
if '+' in arr[i]: # + 가 있는 경우 더해주기
a_list = arr[i].split('+')
temp = 0
for a in a_list:
temp += int(a)
sum -= temp
print(sum)
# 처음 내 아이디어: 1. 구분하기 2. - 앞에 괄호 넣어보고 최소 값 찾기 (어려움)
나의 정답
arr = input().split('-') # 55-40+3 -> ['55', '40+3']
# 첫번째 값 처리(+ 여부 체크)
if '+' not in arr[0]:
sum = int(arr[0])
num = 1
else:
sum = 0
num = 0
for i in range(num, len(arr)):
if '+' in arr[i]: # + 가 있는 경우 더해주기
a_list = arr[i].split('+')
temp = 0
for a in a_list:
temp += int(a)
if i != 0:
sum -= temp
if i == 0:
sum += temp
else: # 숫자 하나만 있는 경우 (원래 -가 앞에 있던 경우)
sum -= int(arr[i])
print(sum)
다른 풀이
arr = input().split('-') # 55-40+3 -> ['55', '40+3']
num = []
# + 있는 값들을 먼저 처리
for a in arr:
temp = 0
splited_a = a.split('+')
for s in splited_a:
temp += int(s)
num.append(temp)
answer = num[0]
for i in range(1, len(num)):
answer -= num[i]
print(answer)