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

[leetCode] 152. Maximum Product Subarray ์นด๋‹จ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋ณ€ํ˜•

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

์ €๋ฒˆ leetCode์—์„œ ํ’€์—ˆ๋˜ Maximum Subarray์™€ ๋น„์Šทํ•œ ๋ฌธ์ œ์ด๋‹ค. ๋•Œ๋ฌธ์— ๊ธฐ์กด์— ์ตํ˜”๋˜ ์นด๋‹จ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€๋งŒ ๋ณ€์ˆ˜๊ฐ€ ์กด์žฌํ•œ๋‹ค. Product๋Š” ๊ณฑ์œผ๋กœ์„œ ์Œ์ˆ˜์™€ ์Œ์ˆ˜์˜ ๊ณฑ์€ ์–‘์ˆ˜๊ฐ€ ๋˜๊ณ  ์–‘์ˆ˜์— ์Œ์ˆ˜๋ฅผ ๊ณฑํ•˜๊ฒŒ ๋˜๋ฉด ์Œ์ˆ˜๊ฐ€ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋Œ€๋น„ํ•˜์—ฌ ์ตœ๋Œ€ ๊ฐ’์„ ๊ตฌํ•ด ์ฃผ์–ด์•ผ ํ•œ๋‹ค. 

 

์นด๋‹จ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ํ˜„์žฌ ๊ฐ’์œผ๋กœ๋งŒ ์ด๋ฃจ์–ด์ง„ ์–ด๋ ˆ์ด์™€ ์ด์ „ ์–ด๋ ˆ์ด+ํ˜„์žฌ๊ฐ’์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ์„œ๋ธŒ ์–ด๋ ˆ์ด์˜ ๋น„๊ต๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. 

class Solution {
    func maxProduct(_ nums: [Int]) -> Int {
        
        var num = nums
        
        var maxP = num[0]
        var minP = num[0]
        var answer = num[0]
        
        for i in 1..<num.count {
            
            let tmpMax = maxP
            
            maxP = max(num[i], maxP * num[i], minP * num[i])
            minP = min(num[i], tmpMax * num[i], minP * num[i])
            
            answer = max(maxP, answer)
        }
        
        return answer
    }
}

์ฒ˜์Œ์— maxP ๋ฐ”๋€Œ๋Š” ๊ฑธ ์ƒ๊ฐ ๋ชปํ•ด์„œ ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ ธ๋Š”๋ฐ tmpMax๋กœ ๋ฐ›์•„์„œ ์‚ฌ์šฉํ–ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  num[0]์œผ๋กœ ๋ฐฐ์—ด ์ฒซ ์ž๋ฆฌ์˜ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์™”๋Š”๋ฐ num.first๊ฐ€ ํ›จ์”ฌ ์ฝ”๋“œ ๋ณด๊ธฐ ํŽธํ•œ๊ฑฐ ๊ฐ™๋‹ค. 

728x90
๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€