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

문제는 예제 처럼 수식이 문자열 형태로 주어지면 수식이 계산되어서 출력이 되는데 최소값으로 출력되게 만들면 되는 문제이다. '-' 연산자 기준으로 먼저 계산한 후 전체를 계산하면 최소값을 구할수 있을 것 같았다.
# 입력값을 받아서 split 함수를 이용하여 자름.
input_val = input()
split_val = input_val.split('-')
# eval 함수를 이용하여 문자열을 계산하여 모든 차를 합을 출력
val = eval(split_val[0])
for i in range(1, len(split_val)):
val -= eval(split_val[i])
print(val)
split() 함수를 사용하여 '-' 연산자 기준으로 짤라서 리스트를 만든 후 eval() 함수를 사용하여 각각의 문자열을 계산하여 모든 차의 합을 구할려고 하였다. 그런데 3번 입력값 처럼 0으로 시작하는 값이 입력이 되면 eval 함수를 사용할시 에러가 발생하였다.
그래서 eval() 함수를 사용하지 않고 다시 한번더 '+' 연산자 기준으로 split을 사용해서 계산을 먼저 한 후 모든 차이를 합칠려고 해보았다.
split_val = input().split('-')
num = []
# 다시 한번더 '+' 연산자 기준으로 split를 한 후 for 문을 통해 각 인덱스의
# 합을 구하여 num 리스트에 추가 한다.
for i in split_val:
val = i.split('+')
num.append(sum([int(j) for j in val]))
# 그 후 num 첫번째 인덱스에 나머지 각각의 인덱스의 값을 빼준다.
val = num[0]
for k in range(1, len(num)):
val -= num[k]
print(val)
정답을 맞췄지만 for문이 많아서 좋은 정답 같지는 않는 것 같다. 다른 방법을 생각해보았지만 지금 당장은 생각나는 방법이 떠오르지 않는다.
이 알고리즘 문제도 그리기 알고리즘에 속하는 문제였는데 지난번에 풀어본 문제랑은 느낌이 많이 틀렸다. 이 문제를 풀면서 eval()함수에 대해서 공부하게 되었고 이 함수의 제한점도 알게되는 문제였다.