띵유로그

[해커랭크]Max Array Sum (Dynamic Programming) 본문

알고리즘

[해커랭크]Max Array Sum (Dynamic Programming)

띵유 2021. 6. 13. 17:44
반응형

배열이 주어지고 배열의 일부 원소 합중 최대가 되는 조합을 찾는다.
이때 인접한 원소는 선택할 수 없다.

 

max_arr배열에 해당 원소 까지의 최대가 되는 합을 계속해서 갱신해 나간다.
모든 원소가 음수일 때는 0을 return 해야하므로, 처음에는 0과 arr[0]중 최대값을 넣는다.
index 1 까지의 최댓값 : arr[0]만 선택할 때 or arr[1]만 선택할 때
index 2 까지의 최댓값 : arr[2]만 선택할 때 or arr[1]만 선택할 때 or arr[0]만 선택할 때 or arr[0] + arr[2]
...

index i 일때 

max(max_arr[i-1],max(max_arr[i-2],max(arr[i], arr[i]+max_arr[i-2])))
ㄴ> max(본인선택하지 않고 이전까지 최대, max(본인선택하지 않고 비인접 index까지 선택했을 시 최대, max(본인도 선택하고 비인접 index 까지 선택시 최대)))

이렇게 계속해서 max_arr를 갱신한 후 최대값을 찾는다.

반응형
Comments