|
| 1 | +''' |
| 2 | +์ด ๋ฌธ์ ๋ ์ฃผ์ด์ง ์ ์ ๋ฐฐ์ด์์ ๊ฐ์ฅ ๊ธด ์ฆ๊ฐํ๋ ๋ถ๋ถ ์์ด(LIS)์ ๊ธธ์ด๋ฅผ ์ฐพ๋ ๋ฌธ์ ์ |
| 3 | +๋ถ๋ถ ์์ด์ด ์ฐ์๋์ง๋ ์์๋ ๋์ง๋ง ์์๋ ์ ์งํด์ผ ํจ |
| 4 | +์ด์ง ํ์์ ํ์ฉ! |
| 5 | +
|
| 6 | +์๊ฐ ๋ณต์ก๋: O(n log n) |
| 7 | + ๊ฐ ์ซ์๋ง๋ค ์ด์ง ํ์(O(log n))์ ์ํํ๋ฏ๋ก ์ ์ฒด O(n log n) |
| 8 | +
|
| 9 | +๊ณต๊ฐ ๋ณต์ก๋: O(n) |
| 10 | + tails ๋ฐฐ์ด์ด ์ต๋ n์ ๊ณต๊ฐ์ ์ฌ์ฉํจ |
| 11 | +
|
| 12 | +
|
| 13 | +Example 1์ ๊ฒฝ์ฐ๋ฅผ ๋ค๋ฉด |
| 14 | +nums = [10,9,2,5,3,7,101,18] |
| 15 | +
|
| 16 | +| ๋จ๊ณ | ์ฒ๋ฆฌํ ์ซ์ | ๋์ ์ค๋ช
| `tails` ๋ฐฐ์ด ์ํ | |
| 17 | +|------|-------------|----------------------------------|-----------------------| |
| 18 | +| 1 | 10 | ๋น ๋ฐฐ์ด์ 10 ์ถ๊ฐ | `[10]` | |
| 19 | +| 2 | 9 | 10๋ณด๋ค ์์ผ๋ฏ๋ก 10 โ 9๋ก ๊ต์ฒด | `[9]` | |
| 20 | +| 3 | 2 | 9๋ณด๋ค ์์ผ๋ฏ๋ก 9 โ 2๋ก ๊ต์ฒด | `[2]` | |
| 21 | +| 4 | 5 | 2๋ณด๋ค ํฌ๋ฏ๋ก 5 ์ถ๊ฐ | `[2, 5]` | |
| 22 | +| 5 | 3 | 5๋ณด๋ค ์์ผ๋ฏ๋ก 5 โ 3๋ก ๊ต์ฒด | `[2, 3]` | |
| 23 | +| 6 | 7 | 3๋ณด๋ค ํฌ๋ฏ๋ก 7 ์ถ๊ฐ | `[2, 3, 7]` | |
| 24 | +| 7 | 101 | 7๋ณด๋ค ํฌ๋ฏ๋ก 101 ์ถ๊ฐ | `[2, 3, 7, 101]` | |
| 25 | +| 8 | 18 | 101๋ณด๋ค ์์ผ๋ฏ๋ก 101 โ 18๋ก ๊ต์ฒด | `[2, 3, 7, 18]` | |
| 26 | +
|
| 27 | +์ต์ข
๊ฒฐ๊ณผ : tails ๋ฐฐ์ด์ ๊ธธ์ด = 4 |
| 28 | +์ต์ฅ ์ฆ๊ฐ ๋ถ๋ถ ์์ด ์์ : [2, 3, 7, 18] ๋๋ [2, 3, 7, 101] ๋ฑ์ด ๊ฐ๋ฅํจ |
| 29 | +
|
| 30 | +''' |
| 31 | + |
| 32 | +class Solution: |
| 33 | + def lengthOfLIS(self, nums: List[int]): |
| 34 | + |
| 35 | + # ๊ฐ ๊ธธ์ด์ ๋ถ๋ถ ์์ด ์ค ๊ฐ์ฅ ์์ ๋ง์ง๋ง ๊ฐ์ ์ ์ฅํจ |
| 36 | + tails = [] |
| 37 | + |
| 38 | + for num in nums: |
| 39 | + |
| 40 | + # num์ด ๋ค์ด๊ฐ ์ ์ ํ ์์น๋ฅผ ์ด์ง ํ์์ผ๋ก ์ฐพ์ |
| 41 | + index = bisect.bisect_left(tails, num) |
| 42 | + |
| 43 | + if index == len(tails): |
| 44 | + |
| 45 | + # num์ด tails์ ๋ชจ๋ ๊ฐ๋ณด๋ค ํฌ๋ฉด ์๋ก์ด ๊ธธ์ด์ ๋ถ๋ถ ์์ด์ ์์ฑ |
| 46 | + tails.append(num) |
| 47 | + else: |
| 48 | + |
| 49 | + # ๊ธฐ์กด ๋ถ๋ถ ์์ด์ ๋ง์ง๋ง ๊ฐ์ ๋ ์์ num์ผ๋ก ๊ฐฑ์ ํจ |
| 50 | + # tails ๋ฐฐ์ด์ ์๋ฏธ๋ tails[i] = ๊ธธ์ด๊ฐ i+1์ธ ๋ถ๋ถ ์์ด์ ๊ฐ์ฅ ์์ ๋ง์ง๋ง ๊ฐ์ ์ ์งํ์ฌ |
| 51 | + # ์๋ก์ด ์ซ์๊ฐ ์ถ๊ฐ๋๊ธฐ ์ฌ์์ง |
| 52 | + tails[index] = num |
| 53 | + |
| 54 | + # tails์ ๊ธธ์ด๊ฐ ์ต๋ LIS ๊ธธ์ด์ |
| 55 | + return len(tails) |
| 56 | + |
| 57 | + |
0 commit comments