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