sm 기술 블로그

149. 1541(잃어버린 괄호) - 파이썬 본문

문제/백준_파이썬

149. 1541(잃어버린 괄호) - 파이썬

sm_hope 2022. 7. 18. 18:20
import sys
input = sys.stdin.readline

N = input()
result = 0

Nplus = N.replace("-"," ")

tmp1 = list(Nplus.split())

for i in range(len(tmp1)):
  if (tmp1[i].find("+") != -1):
    tmp2 = tmp1[i].replace("+"," ")
    plusList = list(map(int, tmp2.split()))
    tmp1[i] = str(sum(plusList))

tmp1 = list(map(int, tmp1))

if len(tmp1) > 1:
  result = tmp1[0]
  del tmp1[0]
  for val in tmp1:
    result -= val

else:
  result = tmp1[0]

print(result)

문제요약

괄호를 제외하고 +와 -만 가진 연산자가 있다. 적절히 먼저 계산해야할 곳을 찾아 이를 최소로 만들 수 있게 해라.

설명

계산을 무조건 +연산자 부터 실행하면 최소로 만들 수 있다.

다음과 같다고 볼 수 있다.

 

Nplus = N.replace("-"," ")

tmp1 = list(Nplus.split())

먼저 - 부분은 공백으로 처리하고 tmp1에 리스트 형태로 저장한다.

 

위 식 같은 경우에 ["55", "50+40"] 이 만들어 질 것이다.

for i in range(len(tmp1)):
  if (tmp1[i].find("+") != -1):
    tmp2 = tmp1[i].replace("+"," ")
    plusList = list(map(int, tmp2.split()))
    tmp1[i] = str(sum(plusList))

tmp1리스트를 탐색하면서 만약 +를 가지고 있다면 연산을 시작한다.

+를 공백으로 바꾸고 그부분을 쪼갠다음 리스트에 저장하여 덧셈을 하고 다시 tmp1에 저장한다.

문자열로 저장한 이유는 다른 배열들이 문자열이기 때문에 처리를 위하여 문자열로 변환하고 저장한다.

 

tmp1 = list(map(int, tmp1))

+연산의 계산이 끝났으므로 tmp1 내에 모든 수를 int형으로 변환해준다.

 

if len(tmp1) > 1:
  result = tmp1[0]
  del tmp1[0]
  for val in tmp1:
    result -= val

else:
  result = tmp1[0]

print(result)

tmp1의 길이가 1이라면 빼기 연산이 없다는 것이다.

따라서 result에 그대로 저장하고 그렇지 않다면

빼기 연산을 진행해준다.

'문제 > 백준_파이썬' 카테고리의 다른 글

151. 10828(스택) - 파이썬  (0) 2022.07.20
150. 13305(주유소) - 파이썬  (0) 2022.07.19
148. 11399(ATM) - 파이썬  (0) 2022.07.18
147. 1931(회의실 배정) - 파이썬  (0) 2022.07.17
146. 11047(동전 0) - 파이썬  (0) 2022.07.17
Comments