알고리즘

백준 1541 파이썬

은세고화 2021. 11. 18. 14:49
반응형

https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net

 

-앞의 숫자는 다 더하고 -뒤의 숫자만 괄호를 치면 된다. 시키는 대로 괄호를 추가한 뒤 파이썬의 eval함수를 통해 입력받은 문자열을 자동으로 연산하도록 프로그램을 짰다.

 

앞에 0이 붙은 경우 eval함수가 작동하지 않아서 int로 변환하는 작업을 했다.

 

n = input()

num_list = []
s = ''
for i in n:
    if i.isdigit():
        s += i
    else:
        num_list.append(str(int(s)))
        num_list.append(i)
        s = ''
num_list.append(str(int(s)))

check = False
for i in range(len(num_list)):
    if num_list[i] == '-':
        if check:
            num_list.insert(i, ')')
        num_list.insert(i+1, '(')
        check = True

if check:
    num_list.append(')')

print(eval(''.join(num_list)))

 

돌려보니 TypeError가 발생했다. 어떤 부분이 원인인지 알 수 없어서 다른 방식을 참고했다.

-의 앞에 있는 값은 모두 더한 후 그 값에 -뒤에 있는 값을 빼주면 된다.

split을 사용하면 isdigit()과 빈 문자열로 일일이 숫자를 만들지 않아도 된다.

 

n = input().split('-')
result = 0
for i in n[0].split('+'):
    result += int(i)
for i in n[1:]:
    for j in i.split('+'):
        result -= int(j)
print(result)
반응형