백준 1541 - 잃어버린 괄호 (Python3)
코드
# +, - 두가지 연산 중 최솟값을 만들려면
# 덧셈끼리 먼저 해주고 뺄셈을 처리해야함
# 따라서 -을 기준으로 숫자들을 나눠서 입력받고
# +의 좌우 숫자들을 먼저 따로 더한 후
# 그 합을 -로 연산하면 최솟값을 구할 수 있음
expr = input().split('-')
# 식에 있는 숫자들을 담을 리스트
num = []
for i in expr:
# 임시로 숫자의 합을 저장할 변수
temp = 0
# +가 포함돼있으면 다시 쪼개준다
# +가 포함돼있지 않으면 s = i
s = i.split('+')
for j in s:
# + 연산 애들끼리 다 더해줌
temp += int(j)
num.append(temp)
# num[0] : 처음 - 연산이 나오기 전까지의 숫자들을 더한 값
n = num[0]
# 이 숫자에 나머지 모든 값들을 다 빼준다
# 만약 - 연산이 하나도 존재하지 않으면 num의 길이는 1이므로
# - 연산 자체가 발생하지 않음
for i in range(1, len(num)):
n -= num[i]
print(n)
문제 해설
그리디 알고리즘 문제이다. 코드를 어떻게 짜야할지 와닿지 않아서 구글링으로 검색해서 해결..하였다.
연산은 덧셈과 뺄셈만 주어지므로, 뺄셈을 한 번이라도 수행하는 경우, ‘-‘부터 다음에 나오는 ‘-‘까지의 숫자들을 먼저 더해주고 그 후 뺼셈을 수행하면 최솟값을 구할 수 있다. (먼저 더해준다는 과정이 곧 괄호를 씌우는 것)
코테 문제를 풀 때 습관처럼 int(input().split())으로 띄어쓰기를 기준으로 숫자를 많이 입력받았으면서 split() 함수를 활용하여 ‘-‘를 기준으로 나눠서 입력받는 다는 것을 연상하지 못했다. 좀 더 기본에 충실하여 공부를 해야겠다!
댓글남기기