본문 바로가기
알고리즘/baekjoon

[알고리즘/baekjoon] 1541_잃어버린 괄호(python)

by 천뿌니 2021. 11. 23.
728x90

문제

https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

# 괄호의 개수를 구하는 것이 아니라 식의 결과를 최소값으로 만드는 것이 핵심이다.
# 그럴려면 최초로 마이너스가 나오기 전까지는 더하고, 그 후 마이너스가 나오는 순간 다 빼주면 된다.
 
string = input().split("-") # 최초로 마이너스가 어디서 나오는지 확인
sum = 0

for i in string[0].split("+"): # 최초의 마이너스 전까지의 숫자를 다 더한다. 
# + 수식으로 묶여져있을수도 있으니 split("+")를 사용해 하나씩 숫자를 받아온다.
  sum+=int(i) # 최초의 마이너스 전 까지의 합은 순수한 +의 합이다.

for i in string[1:]: # 수식의 2번째 원소부터 받아오는데
  for j in i.split("+"): # 원소가 30이나 40처럼 단일 원소일 수도 있고
  # 20+30이나 40+50+70처럼 수식으로 묶여져있을수도 있으니 split("+")을 사용해 하나씩 받아온다.
    sum -= int(j) # 순수 합 sum에서 원소를 하나씩 빼준다.

print(sum)

# 예시
# 25+35+40-70-30+40-50+30-65 입력으로 들어오면
# string = [25+35+40, 70, 30+40, 50+30, 65]
# string[0] = 25+35+40 -> string[0].split["+"] = 25 35 40 -> sum = 100
# 100 - 70(string[1]) - 30(string[2][0]) - 40(string[2][1]) - 50(string[3][0]) - 30(string[3][1]) - 65(string[4][0]) = -185

 

* 아래 깃허브를 참고해주세요

https://github.com/JunSeokCheon

 

JunSeokCheon - Overview

JunSeokCheon has 6 repositories available. Follow their code on GitHub.

github.com

 

댓글