괄호를 넣어 식의 답을 최소로 만드는 문제이다. 풀이는 생각보다 간단하다. 식이 55-50+40이라하면, -를 기준으로 뒤의 값들은 그 다음 -가 나올 때 까지 모두 더해주면 된다. 다른 식들도 -를 기준으로 더해주기만 하면 되기 때문에, 나는 수를 더해주는 함수를 만들고, 첫번째 시행일 때는 sum에 더해주고, 두번째 시행부터는 -가 나오기 때문에 빼주는 식으로 코드를 짰다. 그러다보니 코드도 길고 복잡했다.
##함수 선언 부분##
def Plus_calculation(e): #덧셈 식을 계산해주는 함수
num = []
sum_num = 0
length = 0
for i in range(len(e)): #받은 배열의 길이만큼
if e[i] != '+': #+가 아닐 때는
num.append(e[i]) #num에 숫자를 append해주고
if e[i] == '+' or i == len(e)-1: #+이거나 배열이 끝나면,
length = len(num)
for j in range(length):#num의 자릿수만큼
sum_num += int(num.pop())*(10**j) #num을 pop해주고 10씩 반복해서 자릿수를 맞추어준다.
return sum_num
##변수 선언 부분##
math = []
isFirst = 0
plus = []
sum = 0
##메인 함수 부분##
if __name__ == "__main__":
math = input()
for i in range(len(math)):
if math[i] != '-': #-가 아니면 식을 append
plus.append(math[i])
if math[i] == '-' or i == len(math)-1: #-거나 식의 끝일 때,
if isFirst == 0: #첫번째 시행이면,
sum += Plus_calculation(plus) #더해주고
isFirst = 1
else: #두번째 이상 시행부터는
sum -= Plus_calculation(plus) #-인 경우이기 때문에, 값을 빼준다.
del(plus) #배열 초기화
plus = []
print(sum)
반면의 인터넷에서 찾은 이 코드는 애당초 입력을 받을 때, -를 기준으로 입력을 받고, 또한 값을 계산 할 때에도, +를 기준으로 값을 더하기만 해주었다. 코드도 훨씬 짧고 간결하다. 물론 파이썬이기 때문에 짧은 것이겠지만 같은 문제를 풀어도 코드의 길이와 간결함이 달랐다. 다음부턴 파이썬의 특성을 잘 이용하도록 노력해야겠다.
'백준 문제풀이(파이썬) > 그리디 알고리즘' 카테고리의 다른 글
백준 13305번 - 주유소 (0) | 2021.06.19 |
---|---|
백준 1931번 - 회의실 배정 (Feat. Greedy Algorithms) (0) | 2021.06.16 |