💬 문제
https://school.programmers.co.kr/learn/courses/30/lessons/161988#
💬 Idea
DP를 이용하여 수열의 합의 Max값을 채워나간다.
sequence와 -1로 시작하는 (-1, 1, -1, 1, -1, 1, …) 의 배열을 곱한 배열을 s1에 저장하고,
sequence와 1로 시작하는 (1,-1, 1, -1, 1, -1, …) 의 배열을 곱한 배열을 s2에 저장한다.
[ dp 점화식 ]
- (dp에 저장된 j - 1값 + 현재 s1의 값) 과 (s1에 저장된 j - 1값 + 현재 s1의 값) 중 더 큰 값을 dp[j]에 저장한다.
- ⇒ dp1[j] = max(dp1[j - 1] + s1[j], s1[j - 1] + s1[j])
dp1에 저장된 max값과 dp2에 저장된 max값 중 더 큰 값을 리턴한다.
💬 풀이
import Foundation
func solution(_ sequence:[Int])->Int64{vars1:[Int]=[]vars2:[Int]=[]varpurse=(-1,1)foriin0..<sequence.count {
s1.append(sequence[i]* purse.0)
s2.append(sequence[i]* purse.1)
purse =(purse.0*-1, purse.1*-1)}vardp1=Array(repeating:0, count: s1.count)vardp2=Array(repeating:0, count: s2.count)dp1[0]=s1[0]dp2[0]=s2[0]forjin1..<dp1.count {dp1[j]=max(dp1[j -1]+ s1[j],s1[j -1]+ s1[j])dp2[j]=max(dp2[j -1]+ s2[j],s2[j -1]+ s2[j])}returnInt64(max(dp1.max()!, dp2.max()!))}
💬 문제https://school.programmers.co.kr/learn/courses/30/lessons/161988#
💬 IdeaDP를 이용하여 수열의 합의 Max값을 채워나간다.
sequence와 -1로 시작하는 (-1, 1, -1, 1, -1, 1, …) 의 배열을 곱한 배열을 s1에 저장하고,
sequence와 1로 시작하는 (1,-1, 1, -1, 1, -1, …) 의 배열을 곱한 배열을 s2에 저장한다.
[ dp 점화식 ]
dp1에 저장된 max값과 dp2에 저장된 max값 중 더 큰 값을 리턴한다.
💬 풀이