사용 언어 - Python3
문제 - 사칙연산
정답
DP 규칙 찾기 (정답 맞춘 여부 X)
사칙연산의 최대값을 구하기
arr를 뒤에서부터 확인하면서 마이너스가 나오기 전까지 sum_value에 값을 더해준다.
- 숫자인 경우, sum_value에 값을 더한다. sum_value += int(arr[idx])
- +부호인 경우, continue
마이너스 부호를 만나면, 현재까지 저장한 값 sum_value에만 마이너스를 붙일지, 앞의 값체 계산한 값에서 마이너스를 붙일지 결정해야 한다. 최대/최소값을 갱신한다.
- 최솟값 = min(-(sum_value + 최대값), -sum + 최소값)
- 최대값 = max(-(sum_value+최소값),-minus_v+(sum_value-minus_v)최대값)
- 갱신 후, sum_value = 0으로 초기화해주기
마지막에 저장된 sum_value까지 최대값에 더해주면, 정답이 된다.
def solution(arr):
minmax = [0, 0]
sum_value = 0
for idx in range(len(arr)-1, -1, -1):
if arr[idx] == '+':
continue
elif arr[idx] == '-':
tempmin, tempmax = minmax
minmax[0] = min(-(sum_value + tempmax), -sum_value + tempmin)
# -(sum + max):-가 식전체에 붙는 경우, -sum+min:-가 이전 -값 앞까지만 붙는 경우
minus_v = int(arr[idx+1])
minmax[1] = max(-(sum_value + tempmin), -minus_v+(sum_value - minus_v) + tempmax)
# -(sum + min):-가 식전체에 붙는 경우, -v+(sum-v)+max:-가 바로 뒤의 값에만 붙는 경우
sum_value = 0
elif int(arr[idx]) >= 0:
sum_value += int(arr[idx])
minmax[1] += sum_value
return minmax[1]
레퍼런스
- 정답 풀이
- 깃허브
'Algorithm > 동적계획법' 카테고리의 다른 글
[프로그래머스 lv 3] N으로 표현 (2) | 2023.12.05 |
---|---|
[프로그래머스 lv 4] 도둑질 (0) | 2023.06.07 |
[프로그래머스 lv 3] 등굣길 (0) | 2023.06.02 |
[프로그래머스 lv 3] 정수 삼각형 (0) | 2023.06.02 |
다이나믹 프로그래밍? (0) | 2023.06.01 |
댓글