백준 [ALGORITHM] - 잃어버린 괄호 (1541)

2023. 4. 1. 16:13코딩/백준 [ALGORITHM]

반응형

 

잃어버린 괄호라는 문제이다.

해당 코드를 짜기 전에 가장 오래 생각 했던 부분은

어디에 괄호를 넣어야 가장 작은 수가 나오는지? 이다.

 

예를 들어, 10-20+30-40이 주어졌다고 생각해보자.

 

여기서 양수인 숫자가 -로 변했을 때, 수가 더 작아지게 된다.

따라서 음수 뒤에 양수가 온다면 괄호에 포함시켜주면 된다는 것이다.

 

따라서 원래라면 10-20+30-40 = -20이 나와야 하지만.

10-(20+30)-40 = -80이 나오게 된다.

 

참고로 문자열을 입력 받고 난 후 계산은 파이썬의 eval함수를 이용하였는데,

여기서 나는 굳이 괄호를 사용하지 않고, 배열을 이용하여 -사이에 있는 값을 더해주고,

새로운 배열에 옮겨서 10 - 50 - 40 을 eval에 넣고 돌렸다.

 

import re


def parse_expression(expr):
    pattern = r'(\d+|[\-*/()])'
    tokens = re.findall(pattern, expr)
    return tokens

def calculate_between_dashes(lst):
    nums = []
    result = []
    for item in lst:
        if item == '-':
            result.append(str(sum(nums)))
            nums = []
            result.append(item)
        else:
            nums.append(int(item))
    result.append(str(sum(nums)))
    return result

    

text = input()
tokens = parse_expression(text)
last = calculate_between_dashes(tokens)
result = ' '.join(s for s in last)
print(eval(result))

 

반응형