문제
코드
My answer
import sys
input=sys.stdin.readline
a=input()
n_temp=[]
c_temp=['/n']
temp=''
for i in range(len(a)):
if(a[i]!='+' and a[i]!='-' and i!=len(a)-1):
temp+=a[i]
else:
if(c_temp[-1]=='+'):
n_temp[-1]+=int(temp)
else:
n_temp.append(int(temp))
temp=''
c_temp.append(a[i])
for i in range(len(n_temp)-1):
n_temp[i+1]=(n_temp[i]-n_temp[i+1])
print(n_temp[-1])
Another answer
arr = input().split('-')
s = 0
for i in arr[0].split('+'):
s += int(i)
for i in arr[1:]:
for j in i.split('+'):
s -= int(j)
print(s)
풀이
우선 제일 먼저 생각한건 그냥 무작정 모든 경우의 수를 생각해볼까였다. 그러나 모든 경우의 수를 생각하기에는 너무 많은 처리, 시간이 필요할 것 같았다.
두번째로 임의로 여러 예시를 생각하다보니, 그냥 +부터 전부 먼저 계산하면 될 것 같았다. +붙어있는건 그냥 하나의 수로 생각해서 미리 합쳐놓고 계산해보니, 모두 최소가 나왔다. 이제 위에 생각한 아이디어를 구현하기 위해서 우선 전체 식을 훑으면서 +가 등장하면 바로 앞 뒤 숫자를 합치고 이외에는 그냥 숫자만 리스트에 집어넣었다. 최종적으로 리스트에는 여러개의 숫자만 남게되고 이미 +부호는 전부 계산한 상태이니 리스트안에있는 숫자들만 앞에서부터 빼면 됐다.
위 아이디어를 설명하기 위해 다른 분들의 글을 살펴보니, -뒤에 괄호를 바로 치게되면 그 뒤에 괄호안에 있는 숫자들이 모두 음수로 변하게 된다.
따라서 "뺄셈이 나온 후 부터 그 다음 뺄셈이 나올 때 까지 적혀있는 수들을 모두 더해서 빼야 한다" 라고 한다. 이 말이 내가 생각한 +는 전부 먼저 계산한다랑 같은 결과가 나오는 것 같다.
728x90
반응형
'코딩테스트 > 백준[Python]' 카테고리의 다른 글
[Python] 백준 #21314- 민겸 수 (0) | 2023.09.01 |
---|---|
[Python] 백준 #20365- 블로그 2 (0) | 2023.09.01 |
[Python] 백준 #19941 - 햄버거 분배 (0) | 2023.08.24 |
[Python] 백준 #20300 - 서강근육맨 (0) | 2023.08.24 |
[Python] 백준 #20115 - 에너지 드링크 (0) | 2023.08.24 |