suvera-dev πŸ₯¦

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ Lv3] 연속 νŽ„μŠ€ λΆ€λΆ„ μˆ˜μ—΄μ˜ ν•© - Swift λ³Έλ¬Έ

Algorithm/CodingTest- Swift

[ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€ Lv3] 연속 νŽ„μŠ€ λΆ€λΆ„ μˆ˜μ—΄μ˜ ν•© - Swift

suvera 2023. 5. 22. 17:58

https://school.programmers.co.kr/learn/courses/30/lessons/161988

 

ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€

μ½”λ“œ μ€‘μ‹¬μ˜ 개발자 μ±„μš©. μŠ€νƒ 기반의 ν¬μ§€μ…˜ 맀칭. ν”„λ‘œκ·Έλž˜λ¨ΈμŠ€μ˜ 개발자 λ§žμΆ€ν˜• ν”„λ‘œν•„μ„ λ“±λ‘ν•˜κ³ , λ‚˜μ™€ 기술 ꢁ합이 잘 λ§žλŠ” 기업듀을 맀칭 λ°›μœΌμ„Έμš”.

programmers.co.kr

 

λŒ€ν‘œμ μΈ DPμœ ν˜• 문제인데, Swift 풀이가 많이 μ—†κΈΈλž˜ μ—…λ‘œλ“œ ν•©λ‹ˆλ‹€ !

μ²˜μŒμ— dp 배열을 2개 λ§Œλ“œλŠ” 아이디어λ₯Ό λ– μ˜¬λ¦¬μ§€ λͺ»ν•΄μ„œ 친ꡬ의 도움을 λ°›μ•„ ν’€μ—ˆλ‹€ ! 샀라웃 janechoi..

λ‹€μŒμ— λΉ„μŠ·ν•œ 문제 λ‚˜μ˜€λ©΄ dp 배열을 2개둜 λ‚˜λˆ μ„œ κ³„μ‚°ν•˜λŠ” 방법을 ν™œμš©ν•΄μ•Όκ² λ‹€ :) 

 

func solution(_ sequence:[Int]) -> Int64 {
    
    // -1둜 μ‹œμž‘ν•˜λŠ” λ°°μ—΄
    var dp1 = Array(repeating: 0, count: sequence.count)
    
    // 1둜 μ‹œμž‘ν•˜λŠ” λ°°μ—΄
    var dp2 = Array(repeating: 0, count: sequence.count)
    
    var dpnum1 = [-1]
    var dpnum2 = [1]
    
    var num = 1
    
    for i in 1..<sequence.count {
        dpnum1.append(num)
        dpnum2.append(-num)
        num = -num
    }
    
    dp1[0] = dpnum1[0] * sequence[0]
    dp2[0] = dpnum2[0] * sequence[0]
    
    for i in 1..<sequence.count {
        dp1[i] = max(sequence[i]*dpnum1[i], dp1[i-1]+(sequence[i]*dpnum1[i]))
        dp2[i] = max(sequence[i]*dpnum2[i], dp2[i-1]+(sequence[i]*dpnum2[i]))
    }
    
    return Int64(max(dp1.max()!, dp2.max()!))
}

1) -1둜 μ‹œμž‘ν•˜λŠ” λ°°μ—΄κ³Ό 1둜 μ‹œμž‘ν•˜λŠ” 배열을 각각 λ§Œλ“€μ–΄μ€€λ‹€.

2) dp λ°°μ—΄ λ˜ν•œ -1둜 μ‹œμž‘ν•˜λŠ” μ΅œλŒ“κ°’μ„ μ €μž₯ν•  λ°°μ—΄κ³Ό 1둜 μ‹œμž‘ν•˜λŠ” μ΅œλŒ“κ°’μ„ μ €μž₯ν•  배열을 λ§Œλ“€μ–΄μ€€λ‹€.

3) 점화식을 μ„Έμ›Œ μ΅œλŒ“κ°’μ„ κ°±μ‹ ν•΄μ€€λ‹€.

μ—¬κΈ°μ„œ 점화식을 μ„ΈμšΈ λ•Œ, (ν˜„μž¬ κ°’, μ΄μ „κΉŒμ§€μ˜ ν•© + ν˜„μž¬κ°’)을 λΉ„κ΅ν•΄μ€˜μ•Ό 연속 배열을 λ§Œλ“€ 수 μžˆλ‹€.

 

μ²˜μŒμ—λŠ” 연속인 것을 μƒκ°ν•˜μ§€ λͺ»ν•˜κ³  (μ΄μ „κΉŒμ§€μ˜ ν•©, μ΄μ „κΉŒμ§€μ˜ ν•© + ν˜„μž¬κ°’)을 λΉ„κ΅ν•΄μ£Όμ—ˆλŠ”λ°,

κ·Έλ ‡κ²Œ 되면 ν˜„μž¬ 인덱슀λ₯Ό λ„μš°κ³  λ‹€μŒμœΌλ‘œ λ„˜μ–΄κ°€κ²Œ 되기 λ•Œλ¬Έμ— 연속 λ°°μ—΄μ΄λΌλŠ” 쑰건이 깨진닀 !!

이 점에 μœ μ˜ν•΄μ„œ ν’€μ–΄μ•Ό ν•œλ‹€ ! 

Comments