코드

# +, - 두가지 연산 중 최솟값을 만들려면
# 덧셈끼리 먼저 해주고 뺄셈을 처리해야함
# 따라서 -을 기준으로 숫자들을 나눠서 입력받고
# +의 좌우 숫자들을 먼저 따로 더한 후
# 그 합을 -로 연산하면 최솟값을 구할 수 있음
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() 함수를 활용하여 ‘-‘를 기준으로 나눠서 입력받는 다는 것을 연상하지 못했다. 좀 더 기본에 충실하여 공부를 해야겠다!

댓글남기기