sm 기술 블로그
149. 1541(잃어버린 괄호) - 파이썬 본문
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