|
| 1 | +""" |
| 2 | +์ฃผ์ด์ง ์ ์ ๋ฐฐ์ด nums์์ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ๋ฌธ์ |
| 3 | +
|
| 4 | +๋์ ๊ณํ๋ฒ, ์ด์ค ํฌ๋ฌธ ํ์ด - TC: O(n^2), SC: O(n) |
| 5 | +
|
| 6 | +dp[i]: nums[i]๋ก ๋๋๋ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐ ์์ด์ ๊ธธ์ด. ์ด๊ธฐ๊ฐ์ ๋ชจ๋ 1 (์๊ธฐ ์์ ๋ง ์์ ๋) |
| 7 | +
|
| 8 | +์ค๋ฆ์ฐจ์ ๋ถ๋ถ ์์ด -> ์์ ์๋ ์๊ฐ ๋ค์ ์๋ ์๋ณด๋ค ์์์ผ ํจ. |
| 9 | +""" |
| 10 | + |
| 11 | +class Solution: |
| 12 | + def lengthOfLIS(self, nums: List[int]) -> int: |
| 13 | + n = len(nums) |
| 14 | + dp = [1] * n |
| 15 | + for i in range(n): |
| 16 | + for j in range(i): |
| 17 | + if nums[j] < nums[i]: # ์ค๋ฆ์ฐจ์ ์กฐ๊ฑด ๋ง์กฑํ๋ค๋ฉด |
| 18 | + dp[i] = max(dp[i], dp[j] + 1) # ํ์ฌ์ nums[j] ๋ค์ nums[i]๋ฅผ ๋ถ์ธ ์์ด ์ค ๋ ๊ธด ๊ธธ์ด ์ ํ |
| 19 | + return max(dp) # ๊ฐ์ฅ ๊ธด ์ฆ๊ฐ ์์ด์ ๊ธธ์ด |
| 20 | + |
| 21 | + |
| 22 | +""" |
| 23 | +์ฃผ์ด์ง ์ ์ ๋ฐฐ์ด nums์์ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ๋ฌธ์ |
| 24 | +
|
| 25 | +์ด๋ถ ํ์ ํ์ด - TC: O(n log n), SC: O(n) |
| 26 | +
|
| 27 | +# bisect๋? |
| 28 | +bisect๋ Python์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ ๋ ฌ๋ ๋ฆฌ์คํธ์ ์ด์ง ํ์์ผ๋ก ์์๋ฅผ ์ฝ์
ํ ์์น๋ฅผ ์ฐพ๋ ๋ชจ๋. |
| 29 | +
|
| 30 | +bisect_left(arr, x): |
| 31 | +- x๋ฅผ ์ฝ์
ํ ๊ฐ์ฅ ์ผ์ชฝ ์์น๋ฅผ ๋ฐํ |
| 32 | += ์ ๋ ฌ๋ ์ค๋ฆ์ฐจ์ ๋ฐฐ์ด arr์์ x๋ฅผ ๋ผ์ ๋ฃ์ ์ ์๋ ๊ฐ์ฅ ์ผ์ชฝ ์์น (index) ์ฐพ์์ค |
| 33 | +- ๊ฐ์ ๊ฐ์ด ์์ด๋ ๊ทธ ์์ ๋ผ์ ๋ฃ์ |
| 34 | +
|
| 35 | +bisect_right(arr, x): |
| 36 | +- ์ค๋ฅธ์ชฝ ๊ฒฝ๊ณ = ์ค๋ฆ์ฐจ์ ์ ๋ ฌ๋ ๋ฐฐ์ด arr์์, ๊ฐ x๋ฅผ ์ฝ์
ํ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์์น |
| 37 | +- ๊ฐ์ ๊ฐ์ด ์์ผ๋ฉด ๊ทธ ๋ค์ ๋ผ์ ๋ฃ์ |
| 38 | +
|
| 39 | +ํด๋น ๋ฌธ์ ๋ Strictly Increasing ์์ด์ด๋ฏ๋ก ๊ฐ์ ์ซ์๋ฅผ ํ์ฉ x |
| 40 | +-> ๊ฐ์ ๊ฐ์ด ๋ค์ด์ค๋ฉด ๊ธฐ์กด ๊ฐ์ ๋์ฒดํด์ผ์ง, ๊ทธ ๋ค์ ์ถ๊ฐํ๋ฉด ์๋๋ฏ๋ก bisect_left ์ฌ์ฉํ๋ค. |
| 41 | +""" |
| 42 | +import bisect |
| 43 | + |
| 44 | +class Solution: |
| 45 | + def lengthOfLIS(self, nums: List[int]) -> int: |
| 46 | + tail = [] # ๊ฐ ๊ธธ์ด๋ณ ์ฆ๊ฐ ์์ด์ ๋ง์ง๋ง ๊ฐ(๊ฐ์ฅ ์์ ๊ฐ)์ ์ ์ฅ |
| 47 | + for num in nums: |
| 48 | + idx = bisect.bisect_left(tail, num) |
| 49 | + if idx == len(tail): # ๋ฐํ๋ idx๊ฐ tail์ ๋ ๋ถ๋ถ์ด๋ผ๋ฉด ํ์ฌ ์์ด ๋์ ์ถ๊ฐ๋ ์ ์๋ค๋ ๋ป, ์ฆ num์ด tail ์์ ๋ชจ๋ ๊ฐ๋ณด๋ค ํผ |
| 50 | + tail.append(num) # ์์ด ๊ธธ์ด ๋๋ฆผ |
| 51 | + else: |
| 52 | + tail[idx] = num # ๋ ์์ ๊ฐ์ผ๋ก ๋์ฒด |
| 53 | + return len(tail) |
0 commit comments