백준 알고리즘 1541번 Python

정길규·2023년 5월 30일

잃어버린 괄호

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()함수에 대해서 공부하게 되었고 이 함수의 제한점도 알게되는 문제였다.

0개의 댓글