Boj_1541_잃어버린 괄호

이주현·2022년 6월 28일
0

1일1알고리즘

목록 보기
3/3

문제

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

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

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

생각의 흐름

최소로 만들어야 하고 이 문제에서는 +,-의 연산만 사용하므로
-를 기준으로 괄호를 쳐주면 된다고 생각했다.
-안에 -가 있으면 +가 되므로 -부터 또 다른 -가 나오기 전까지만 괄호를 묶어주면 되겠다고 생각했다.
처음엔 입력한 다항식의 항들과 부호를 다 받아야겠다고 생각해서

import re 

poly = (sys.stdin.readline().rstrip()) 
# 100-200+300-500 

arr = re.split('([-|+])', poly) 

print(arr)
# ['100', '-', '200', '+', '300', '-', '500']

참고한 블로그
이런식으로 하나씩 배열에 나눠서 넣어 if문으로 배열 인덱스를 조정하며 조건을 따졌다. 하다보니 코드도 너무 길어지고 복잡한 것 같아 다른 방식으로 해야겠다고 생각했다.

애초에 받을 때부터 -를 기준으로 나눠서 받고,
맨 처음에 받은 숫자는 무조건 합계에 더해지는 거니까 더해주고 뒤에 받은 나눠진 원소들은 연산을 한 후 합계에서 빼주는 방식으로 코드를 작성했다.

코드

import sys 
 
poly = (sys.stdin.readline().rstrip().split('-'))  

total = sum(map(int, poly[0].split("+")))  
 
for i in range(1,len(poly)):
    minus = sum(map(int, poly[i].split("+"))) 
    total -= minus
 
print(total)

개선할 점

map 함수를 완전히 이해하지 못한 채로 사용한 것 같아서
map 함수에 대한 추가적인 공부가 필요할 것 같고,
처음에 사용한 re 라이브러리도 추가적으로 공부해야할 것 같다.

백준_1541

0개의 댓글