|
| 1 | +"""TC: O(n), SC: O(1) |
| 2 | +
|
| 3 | +โป ์ฝ๋๋ฅผ ๋ณด๊ณ ๋์ถฉ ๋ญ ํ๋์ง ๊ฐ์ ์ก์ ๋ค์์ ์๋์ ์์ด๋์ด์์ p, n ๊ตฌ๊ฐ์ด ๋์ค๋ ๋ถ๋ถ๋ง ๋ณด๋ฉด |
| 4 | + ์ข ๋ ๋น ๋ฅธ ์ดํด๊ฐ ๊ฐ๋ฅํ๋ค. |
| 5 | +
|
| 6 | +์์ด๋์ด: |
| 7 | +- ๊ณฑ์ 0์ด ์์ด๋ฉด ์๋ฌด๋ฆฌ ๋ง์ ์๋ฅผ ๊ณฑํด๋ ๊ฒฐ๊ณผ๋ 0์ด๋ค. |
| 8 | +- 0์ด ๋ฑ์ฅํ์ง ์๋ ์ด๋ค subarray๊ฐ ์ฃผ์ด์ก๋ค๊ณ ํ์. |
| 9 | + - ์ฌ๊ธฐ์ ์์๊ฐ ์ง์ ๋ฒ ๋ฑ์ฅํ๋ฉด ๋ชจ๋ ์ซ์๋ฅผ ๊ณฑํ ๊ฒ์ด ๊ฐ์ฅ ํฐ ๊ณฑ์ด ๋๋ค. |
| 10 | + - ์์๊ฐ ํ์ ๋ฒ, ์ด r๋ฒ ๋ฑ์ฅํ๋ค๊ณ ํด๋ณด์. ์ด ๋ฐฐ์ด์ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์กฐํํ ์ ์๋ค. |
| 11 | + - ์์๋ฅผ p, ์์๋ฅผ n์ด๋ผ๊ณ ํํํ์. |
| 12 | + - ์ด ๋ฐฐ์ด์ [p, ..., p, n, p, ... p, n, ..., n, p, ..., p] ๊ผด๋ก ํํ์ด ๊ฐ๋ฅํ๋ค. |
| 13 | + ์ด๋, n์ ์ด r๋ฒ ๋ฑ์ฅํ๊ณ , n์ p๊ฐ ์ฌ๋ฌ ๋ฒ(0๋ฒ๋ ๊ฐ๋ฅ) ๋ฑ์ฅํ๋ ๋ฌถ์ ์ฌ์ด์ ์กด์ฌํ๋ค. |
| 14 | + - p๊ฐ ์ฌ๋ฌ ๋ฒ(0๋ฒ๋ ๊ฐ๋ฅ) ๋ฑ์ฅํ๋ ๊ฒ์ P๋ผ๊ณ ๋ฌถ์ด์ ํํํ๋ฉด ์๋์ ๊ฐ์ด ๋ณผ ์ ์๋ค. |
| 15 | + - [(P), n, (P), n, ..., n, (P), n, (P)] |
| 16 | + - n์ ์ง์ ๋ฒ ๊ณฑํด์ผ ์์๊ฐ ๋์จ๋ค. ์ฐ์๋ ๊ฐ์ ์ต๋ํ ๋ง์ด ๊ณฑํ๋ ค๊ณ ํ๋ฏ๋ก, ํ์ชฝ ๋์ |
| 17 | + ๋ฑ์ฅํ๋ n์ ๋บ ๋๋จธ์ง n๋ค์ ๊ณฑํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ์ ๋ต์ด๋ค. |
| 18 | + - ์์ ์ ๋ต์ ๋ฐ๋ผ ๋ฐฐ์ด์ ์ซ์๋ฅผ ๊ณฑํ๋ ค๊ณ ํ๋ฉด ๋ค์ ๋ ์ค ํ๋๊ฐ ๊ฐ์ฅ ํฐ ์ซ์๋ค. |
| 19 | + - [(P), n, (P), n, ..., n, (P), n, (P)] |
| 20 | + โโโโโโโโโโโโโโโโโโโโโโโโโ |
| 21 | + ์ด ๊ตฌ๊ฐ์ ์ซ์๋ค์ ๋ชจ๋ ๊ณฑํจ |
| 22 | + - [(P), n, (P), n, ..., n, (P), n, (P)] |
| 23 | + โโโโโโโโโโโโโโโโโโโโโโโโโ |
| 24 | + ์ด ๊ตฌ๊ฐ์ ์ซ์๋ค์ ๋ชจ๋ ๊ณฑํจ |
| 25 | + - ์ฆ, ์์์๋ถํฐ ์ซ์๋ฅผ ๊ณ์ ๊ณฑํ๋ฉด์ max๊ฐ์ ์ฐพ์ ๊ฒ, ํน์ ๋ค์์๋ถํฐ ์ซ์๋ฅผ ๊ณ์ |
| 26 | + ๊ณฑํ๋ฉด์ max๊ฐ์ ์ฐพ์ ๊ฒ, ๋ ์ค ํ๋๊ฐ ์์ ๊ตฌ๊ฐ์์์ ์ต๋ ๊ณฑ์
๊ฐ์ด ๋๋ค. |
| 27 | +- ์ฐ๋ฆฌ์๊ฒ ์ฃผ์ด์ง ์ ์ฒด array๋ ๋ค์๊ณผ ๊ฐ์ด ํํ ๊ฐ๋ฅํ๋ค. |
| 28 | + - 0์ด ๋ฑ์ฅํ์ง ์๋ ๊ธธ์ด 1 ์ด์์ subarray๋ฅผ (S), 0์ผ๋ก๋ง ์ด๋ฃจ์ด์ง ๊ธธ์ด 0 ์ด์์ subarray๋ฅผ |
| 29 | + (0)์ด๋ผ๊ณ ํ๋ฉด ์๋์ ๊ฐ์ด ํํ์ด ๊ฐ๋ฅํ๋ค. |
| 30 | + - [(0), (S), (0), (S), ..., (S), (0), (S), (0)] |
| 31 | + - ์ ์ฒด array์์ ์ต๋ subarray ๊ณฑ์ 0์ด๊ฑฐ๋, ํน์ ์์ ๊ฐ S์์์ ์ต๋ ๊ณฑ๋ค ์ค ์ต๋ ๊ฐ์ด๋ค. |
| 32 | +- ์์ ์์ด๋์ด๋ฅผ ํ์ฉํ๋ฉด ๋ค์์ ๋ฐฉ์์ผ๋ก ์ต๋ subarray์ ๊ณฑ์ ์ฐพ์ ์ ์๋ค. |
| 33 | + - nums์ ์์์๋ถํฐ ์ซ์๋ฅผ ํ๋์ฉ ๊ณฑํด๊ฐ๋ฉด์ ์ต๋ ๊ณฑ์ ์ฐพ์. ๋จ, ์ค๊ฐ์ 0์ด ๋์์ ์ต๋ ๊ณฑ |
| 34 | + ๊ฐ์ด 0์ด ๋์์ ๊ฒฝ์ฐ ์ด๋ฅผ ๋ค์ 1๋ก ๋ฐ๊ฟ์ค์ ์์ ์์ด๋์ด๋ฅผ ์ ์ฉํ ์ ์๋๋ก ์ธํ
. |
| 35 | + - ๋๊ฐ์ ์์
์ nums์ ๋ค์์๋ถํฐ ์ซ์๋ฅผ ํ๋์ฉ ๊ณฑํด๊ฐ๋ฉด์ ์งํํจ. |
| 36 | +
|
| 37 | +
|
| 38 | +SC: |
| 39 | +- solution์ ์ ์ฅํ๋ ๋ฐ์ O(1). |
| 40 | +- ๊ณฑ์
๊ฐ์ ์ ์ฅํ๋ ๋ฐ์ O(1). |
| 41 | +- ์ด O(1). |
| 42 | +
|
| 43 | +TC: |
| 44 | +- ๋ฆฌ์คํธ๋ฅผ ์์์๋ถํฐ ์ํํ๋ฉด์ ๊ณฑ/max ์ฐ์ฐ. O(n). |
| 45 | +- ๋ฆฌ์คํธ๋ฅผ ๋ค์์๋ถํฐ ์ํํ๋ฉด์ ๊ณฑ/max ์ฐ์ฐ. O(n). |
| 46 | +- ์ด O(n). |
| 47 | +""" |
| 48 | + |
| 49 | + |
| 50 | +class Solution: |
| 51 | + def maxProduct(self, nums: List[int]) -> int: |
| 52 | + sol = nums[0] |
| 53 | + p = 1 |
| 54 | + for i in nums: |
| 55 | + if p == 0: |
| 56 | + p = 1 |
| 57 | + p *= i |
| 58 | + sol = max(p, sol) |
| 59 | + p = 1 |
| 60 | + for i in reversed(nums): |
| 61 | + if p == 0: |
| 62 | + p = 1 |
| 63 | + p *= i |
| 64 | + sol = max(p, sol) |
| 65 | + return sol |
0 commit comments