BASIC의 개발 노트

1541: 잃어버린 괄호 본문

Algorithm/BaekJoon

1541: 잃어버린 괄호

B2SIC 2022. 6. 25. 18:55

잃어버린 괄호는 +, - 만을 사용한 식에서 괄호를 사용하여 최솟값을 만드는 문제이다.

최솟값을 만드는 핵심은 - 기호가 나왔을 때 그 뒤에 오는 숫자를 가장 크게 만드는 것이다.

숫자를 가장 크게 만들고 그 앞 뒤를 괄호로 감싸게 되면 큰 수 앞에 -가 붙기 때문에 최솟값으로 볼 수 있다.

하지만 - 가 한 개가 아니라 여러 개가 나올 경우도 생각해봐야한다.

이 때는 다음 - 가 나오기 전까지를 괄호로 감싸면 된다.

그러면 다음 - 가 나오기 전까지 숫자를 계속 최대로 만들 수 있기 때문에

한정적인 최댓값을 계속해서 - 값으로 누적시켜 나갈 수가 있다.

 

예를 들면 0-100+20-100+20-100 이라는 식에서 처음 - 이후를 괄호로 감싸게 되면

0-(100+20-100+20-100) 가 되고 결과 값은 60이 된다.

하지만 - 앞을 모두 괄호로 감싸면 0-(100+20)-(100+20)-(100) = -340이 된다.

 

문제 조건에서 입력으로 0으로 시작하는 숫자도 들어올 수 있다고 했기 때문에

들어온 식을 계산 가능한 숫자 형태로 재구성 해서 조건에 맞게 eval을 적용 시켰다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
exp = input()
exp_list = list(exp)
 
clean_exp = ""
num_exp = ""
for item in exp_list:
    if item == "+" or item == "-":
        clean_exp += str(int(num_exp)) + item
        num_exp = ""
    else:
        num_exp += item
 
clean_exp += str(int(num_exp))
 
if '-' in clean_exp:
    clean_exp_list = clean_exp.split('-')
 
    exp = ""
    for item in clean_exp_list:
        exp += "(" + item + ")-"
    exp = exp[:-1]
    result = eval(exp)
else:
    result = eval(clean_exp)
 
print(result)
 
cs

'Algorithm > BaekJoon' 카테고리의 다른 글

1715: 카드 정렬하기  (0) 2022.06.28
1946: 신입 사원  (0) 2022.06.27
13305: 주유소  (0) 2022.06.27
2217: 로프  (0) 2022.06.27
1931: 회의실 배정  (0) 2022.06.22
Comments