괄호가 들어감으로써 답이 달라지는 경우는 어떨 떄일까?
괄호를 넣지 않았을경우
55-50+40=45
괄호를 넣었을경우
55-(50+45)=-35
즉 -가 오고 그후에 +가 오면 무조건 괄호로 묶는게 이득이다
따라서 묶는 조건은 -후에 +가 왔을때
그후에 +가 올경우 괄호를 확장할수있다
1-(2+3+4)
-가 올경우 괄호를 닫는다
1-(2+3)-4
연산중에 -가 한번이라도 나오면 그뒤에는 어떤 연산부호든지 관계없이 모두 뺄셈으로 계산된다는것을 발견했다
예를들어
1-2+3-4+5-6+7-8+9 라는 수식이 있다고 해보자 괄호로 묶으면
1-(2+3)-(4+5)-(6+7)-(8+9)가 된다
이부분은 노트에 몇번 끄적여보면 누구나 납득하게 될것이다
하지만 이렇게 간단하게 풀수있다고?
일단 구현해보았다
exp='+'+input()
num_list=[]
for i in range(1,len(exp)):
if exp[i].isdigit():
if not exp[i-1].isdigit():
a=i
elif exp[i-1].isdigit():
if not exp[i].isdigit():
if exp[a-1]=='+':
num_list.append(int(exp[a:i]))
else:
num_list.append(int(exp[a:i])*-1)
if exp[a-1]=='+':
num_list.append(int(exp[a:len(exp)]))
else:
num_list.append(int(exp[a:len(exp)])*-1)
for i in range(1, len(num_list)):
if num_list[i-1]<0:
if num_list[i] >= 0:
num_list[i]=num_list[i]*-1
print(sum(num_list))
맞았다 전처리를 하지않고 줘서 조금 당황했지만 그래도 풀어냈다
정규표현식으로 풀까했지만 잘 모르기도 하고 지원안해줄것같아서 그냥 풀었다
솔직히 1트만에 맞출줄몰라서 놀랬다
백준 스택 파이썬 (0) | 2022.08.21 |
---|---|
백준 주유소 파이썬 (0) | 2022.08.21 |
백준 회의실 배정 파이썬 (0) | 2022.08.15 |
그리디 알고리즘의 이해 파이썬 (0) | 2022.08.13 |
백준 나머지합 파이썬 (0) | 2022.08.09 |