문제
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
예제 입력 1
55-50+40
예제 출력 1
-35
풀이
런타임에러만 5번 뜸. 아무리 생각해도 런타임 오류뜨는게 이해가 안되서 진짜 답답해 죽을뻔했다..
n = input().split('-')
print(n)
sum_list = []
for i in n:
sum_list.append(eval(i))
sum_list = map(str,sum_list)
answer = eval("-".join(sum_list))
print(answer)
문제를 보니 "수는 0으로 시작할 수 있다"라는 조건이 보였다. 나는 0 + 15 + 30 처럼 0도 연산에 추가될 수 있다는 뜻인 줄 알았는데 알고보니 045 + 45 + 50 - 30 처럼 45을 045로 표현할 수 있다는 뜻이었다.
위와 같이 표현되면 문자열 계산함수인 eval에서 오류가 발생한다. eval전에 0을 걸러내어 구현할 수도 있겠지만, 저 조건자체가 eval을 쓰지말라는 의도같아서 eval을 사용하지 않고 작성하였다.
n = input().split('-')
answer = 0
for i in n[0].split('+'):
answer += int(i)
for i in n[1:]:
for j in i.split('+'):
answer -= int(j)
print(answer)
접근을 한번 잘못하면 힘들다..;
반응형
'Algorithm > Online judge' 카테고리의 다른 글
[백준] 10773번 > 제로 (0) | 2021.01.30 |
---|---|
[백준] 10828번 > 스택 (0) | 2021.01.30 |
[백준] 11399번 > ATM (0) | 2021.01.30 |
[백준] 1931번 > 회의실 배정 (0) | 2021.01.30 |
[백준] 11047 > 동전 0 (0) | 2021.01.30 |