백준 1541

Snowy·2020년 9월 4일
0

코딩테스트

목록 보기
1/3

문제 링크 : https://www.acmicpc.net/problem/1541

1. 아이디어

1) 가장 처음과 마지막 문자는 숫자이다
2) 연속해서 두 개 이상의 연산자가 나타나지 않는다

문제에 나와 있는 두 가지 문구를 통해 예상할 수 있는 테스트 셋은 다음과 같다

1) 모두 다 덧셈
2) 덧셈과 뺄셈의 혼합
3) 모두 다 뺄셈

2. 해결방안

괄호를 적절히 사용해서 가장 적은 값을 뽑아내기 위해서는 양수를 최대한 음수로 바꾸고 음수는 음수 그대로 사용해야 한다. 이를 위해 - 가 나오면 다음 - 가 나올 때까지 모두 괄호로 묶어 버리면 된다.

ex) 10-20+30+40+50 --> 10-(10+20+30+40+50)
ex) 10-20+30-40+50 --> 10-(20+30)-(40+50)

조금만 고민해보면 첫 - 이후에 나오는 모든 수는 음수로 만들 수 있다는 것을 알 수 있다. 그러니까 우리는 첫 - 이전에 나오는 값들에 대해서 따로 처리하고, - 뒤에 나오는 모든 수는 음수로 처리하면 된다.

ex) 10-20+30-40+50 라면 10 은 따로 처리하고 20,30,40,50은 모두 음수로 처리한다

3. 풀이

input_value = input()
array = input_value.split('-')
total = int(0)

tmp = array[0].split('+')
for val in tmp:
    total += int(val)

for i in range(1,len(array)):
    tmp = array[i].split('+')
    for val in tmp:
        total -= int(val)
print(total)
profile
숲과 비, 눈을 좋아하고 스위스를 가는게 꿈입니다

0개의 댓글