baekjoon (solved.ac)/class 3 Solve

1541 - 잃어버린 괄호

hikenny 2022. 10. 26. 17:45

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

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

 

- 수학

- 구현

 

import sys
input = sys.stdin.readline

m = input()[:-1]
n = ''
a = ''

flag = 1
for i in m:
    if i == '-' or i == '+':
        n += str(int(a))
        a = ''
        
        if i == '-': flag = -1

        if flag == 1:
            n += '+'
        else:
            n += '-'
    else:
        a += i

n += str(int(a))
print(eval(n))

 

기본 아이디어는 일단 수학적으로 접근해서, 하나의 - 가 오면 그 뒤의 수는 모두 - 로 만들 수 있다는 아이디어를 사용했다! 그리고 eval 함수로 string을 그대로 계산해서 출력했다

 

사실 더 이쁘게 짤 수 있을 것 같은데 너무 힘들어서 그냥 푼 걸로 만족...

 

 

추가)

import sys
input = sys.stdin.readline

def evalwithouterror(st):
    st = st.split('+')
    for x in range(len(st)):
        st[x] = int(st[x])
    
    return sum(st)

m = input()[:-1].split('-')
a = evalwithouterror(m[0])

for i in range(1, len(m)):
   a -= evalwithouterror(m[i])

print(a)

split 함수를 사용해서 훨씬 보기 좋은 코드를 짰다!

 

split을 띄어쓰기를 통한 입력받을 때만 사용했는데, 어떤 문자를 기준으로 문자열을 구별해 리스트에 저장시키는 좋은 함수였다.. 아마 앞으로 요긴하게 쓰이지 않을까 싶다