๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“š Coding Test

[leetCode] 53. Maximum Subarray with Swift ์นด๋‹จ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์‰ฝ๊ฒŒ ๊ตฌํ•˜๊ธฐ

by ํ‹ด๋”” 2020. 10. 6.
728x90
๋ฐ˜์‘ํ˜•

leetCode 53์€ ๋ชจ๋“  ์›์†Œ์˜ ๊ฐ’์˜ ํ•ฉ์ด ์ตœ๋Œ€๊ฐ’์„ ๊ฐ€์ง€๋Š” ์„œ๋ธŒ ์–ด๋ ˆ์ด๋ฅผ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด ๋ชฉํ‘œ์ž…๋‹ˆ๋‹ค. ์ด๋•Œ ์„œ๋ธŒ ์–ด๋ ˆ์ด๋Š” ์—ฐ์†์„ฑ์„ ๊ฐ€์ ธ์•ผ ํ•˜๋Š”๋ฐ, ์ด ๋œป์€ ์ค‘๊ฐ„ ์ธ๋ฑ์Šค๋ฅผ ๋›ฐ์–ด ๋„˜์ง€ ์•Š๊ณ  ์ธ๋ฑ์Šค ์ˆœ์„œ๋Œ€๋กœ ๋˜์–ด ์žˆ๋Š” ์–ด๋ ˆ์ด์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ๋ฐฐ์—ด์—์„œ ์ตœ๋Œ€๊ฐ’๋“ค์˜ ์กฐํ•ฉ๋งŒ์„ ์ฐพ์•„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ฉฐ ์–ด๋–ค ์„œ๋ธŒ ์–ด๋ ˆ์ด๊ฐ€ ๊ฐ€์žฅ ์ตœ๊ณ ์˜ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”์ง€ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด ์ด ๋ฌธ์ œ์— ํฌ์ธํŠธ ์ž…๋‹ˆ๋‹ค. 

 

์„œ๋ธŒ ์–ด๋ ˆ์ด์˜ ์ตœ๋Œ€๊ฐ’์„ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์—์„œ ๋งŽ์ด ์–ธ๊ธ‰๋˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ Kadane ์•Œ๊ณ ๋ฆฌ์ฆ˜์ž…๋‹ˆ๋‹ค. 

reference Youtube video here ๐Ÿ‘‡

์šฐ์„  ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์ง„ [-2, 1, -3, 4, -1, 2, 1, -5, 4]๋ฅผ ๋ด…์‹œ๋‹ค. ์—ฌ๊ธฐ์„œ ์ฒซ๋ฒˆ์งธ 4๋ฅผ ์ค‘์ ์œผ๋กœ ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ํ˜„์žฌ ์ธ๋ฑ์Šค๋Š” 3์ด๊ณ  ๊ทธ ์ธ๋ฑ์Šค์˜ ๊ฐ’์€ 4์ž…๋‹ˆ๋‹ค. ์ด๋•Œ ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์„œ๋ธŒ ์–ด๋ ˆ์ด์˜ ์กฐํ•ฉ์„ ๋ด…๋‹ˆ๋‹ค. [-2, 1, -3] ์„ K๋ผ ํ•˜๊ณ  [1, -3]์„ M์ด๋ผ ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ฐ๊ฐ ์„œ๋ธŒ ์–ด๋ ˆ์ด์˜ ํ•ฉ์€ -4 ๊ทธ๋ฆฌ๊ณ  -2์ž…๋‹ˆ๋‹ค. ์ฆ‰ ์–ด๋–ค ๋ฐฐ์—ด์˜ ์ „์ฒด ์›์†Œ์˜ ํ•ฉ์ด ๋” ํฐ๊ฐ€ ํ•˜๋ฉด K < M ์ธ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด์ œ ํ˜„์žฌ ์›์†Œ๋ฅผ ๊ฐ ์„œ๋ธŒ ์–ด๋ ˆ์ด์— ๋”ํ•ด ์ค€๋‹ค๊ณ  ํ•ฉ์‹œ๋‹ค.

 

๊ทธ๋ ‡๋‹ค๋ฉด K+[4], M+[4 ]๊ฐ€ ๋˜๊ณ  ์ด๋Š” K < M์ด๊ธฐ ๋•Œ๋ฌธ์— ๋‹น์—ฐํžˆ K+[4] < M+[4]๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ ์•„๋ฌด๋Ÿฐ ๊ฐ’๋„ ์—†๋Š” empty array์ธ []๋ฅผ ์ƒ๊ฐํ•ด ๋ด…์‹œ๋‹ค. ๋ฐฐ์—ด์€ E๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์œ„์˜ ๊ฐœ๋…๊ณผ ๊ฐ™์ด ์ƒ๊ฐํ•˜๋ฉด K + [4](ํ˜„์žฌ ์ธ๋ฑ์Šค ๊ฐ’] < E + [4](ํ˜„์žฌ ์ธ๋ฑ์Šค ๊ฐ’) ์ด๋ผ ํ•œ๋‹ค๋ฉด E+[4] ์„œ๋ธŒ ๋ฐฐ์—ด์ด K+[4] ์„œ๋ธŒ ๋ฐฐ์—ด ๋ณด๋‹ค ํฐ ๊ฒƒ์ด ๋ฉ๋‹ˆ๋‹ค(์ด๋•Œ ํฌ๋‹ค๋Š” ๊ฒƒ์€ ๋ฐฐ์—ด์˜ ๊ฐ ์›์†Œ๋“ค์˜ ํ•ฉ์„ ๋งํ•ฉ๋‹ˆ๋‹ค). E๋Š” ๋นˆ ๋ฐฐ์—ด์ด๋ฏ€๋กœ [4]๊ฐ€ ์„œ๋ธŒ ๋ฐฐ์—ด ์ค‘ ํฐ ๋ฐฐ์—ด์ด ๋˜๋Š” ๊ฒƒ์ด์ฃ . 

 

ํ˜„์žฌ ์ธ๋ฑ์Šค ์‹œ์ ์—์„œ ์ด์ „ ์„œ๋ธŒ ์–ด๋ ˆ์ด๋“ค๊ณผ ํ˜„์žฌ ์ธ๋ฑ์Šค ํ•ฉ์œผ๋กœ ๊ตฌํ•ด์ง„ ๊ฐ’๋ณด๋‹ค ํ˜„์žฌ ์ธ๋ฑ์Šค์˜ ๊ฐ’(ํ˜„์žฌ ์ธ๋ฑ์Šค์˜ ๊ฐ’์œผ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ์„œ๋ธŒ ๋ฐฐ์—ด)์ด ๋” ํฌ๋‹ค๋ฉด ํ˜„์žฌ ์ธ๋ฑ์Šค์˜ ๊ฐ’ ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์„œ๋ธŒ ์–ด๋ ˆ์ด๊ฐ€ ํฐ ๊ฒƒ์ด ๋ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋Œ€์˜ ์ƒํ™ฉ์ด๋ผ๋ฉด ๊ทธ ๋ฐ˜๋Œ€๋กœ ์ด์ „ ์„œ๋ธŒ ์–ด๋ ˆ์ด + ํ˜„์žฌ ์–ด๋ ˆ์ด๊ฐ€ ์ „์ฒด ์–ด๋ ˆ์ด ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’์„ ๊ฐ€์ง€๋Š” ์„œ๋ธŒ ์–ด๋ ˆ์ด๊ฐ€ ๋˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. 

class Solution {
    func maxSubArray(_ nums: [Int]) -> Int {
        var num = nums
        var answer: Int = num[0]
        
        for i in 1..<num.count {
            num[i] = max(num[i], num[i]+num[i-1])
            answer = max(answer, num[i])
        }
        
        return answer
    }
}

 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€