Algorithm/Online judge

[백준] 1541번 > 잃어버린 괄호

민철킹 2021. 1. 30. 17:28

www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

문제

세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.

그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.

괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.

입력

첫째 줄에 식이 주어진다. 식은 ‘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