|
| 1 | +## ๋ฌธ์ |
| 2 | +๋ฐฐ์ด์์ ๊ฐ์ฅ ๊ธด arithmetic sequence ๋ฅผ ์ฐพ๋ ๋ฌธ์ ๋ค. |
| 3 | +arithmetic sequence ๋ ๋ฐฐ์ด A[i], A[i+1], A[i+2] ... ๊ฐ ์์ ๋ ๊ฐ ์์์ ๊ฐ์ ์ฐจ์ด๊ฐ ๋๊ฐ์ ์ํ์ค ์๋ฅผ ๋ค๋ฉด |
| 4 | + |
| 5 | +- `[3, 6, 9, 12, 13]` ์ด๋ ๋ฐฐ์ด์ด ์์ ๋ `[3, 6, 9, 12]` ๋ +3 ์ ์ฐจ์ด๋ก ์ด๋ฃจ์ด์ง ๊ฐ์ฅ ๊ธด ๋ฐฐ์ด์ด ๋๋ค. |
| 6 | +- `[9, 4, 7, 2, 10]` ์ผ ๊ฒฝ์ฐ์ [`4, 7, 10]`์ด +3 ์ผ๋ก ๊ฐ์ฅ ๊ธธ๊ฒ ๊ฐ์ง ์ ์๋ ๋ฐฐ์ด์ด ๋๋ค. |
| 7 | + |
| 8 | +## ์๋ฃจ์
|
| 9 | +์์๋ค์ ์ฐจ์ด๋ฅผ ์ด์ฉํ dp ๋ก ํ ์ ์๋ค. |
| 10 | + |
| 11 | +๊ทธ๋ฆผ์ ์๋๋ฅผ ์ฐธ๊ณ ํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค. |
| 12 | +[์ฐธ๊ณ ](https://medium.com/algorithm-and-datastructure/longest-arithmetic-sequence-567cc4eea949) |
| 13 | + |
| 14 | +`[9, 4, 7, 2, 10]` ์ ๊ฒฝ์ฐ ๊ฐ์ฅ ๊ธด ๋ฐฐ์ด์ `[4, 7, 10]` ์ด๋ค. |
| 15 | +์ด๋ฅผ ๋๋ ์ ์๊ฐํด๋ณด๋ฉด ๋ฐฐ์ด์ ๊ฐ์ `[4, 7]` ๊ณผ `[7, 10]` ์ ์กฐํฉ์ด๋ค. ์ฆ ์ด๋ค arithmetic sequence ๋ฅผ ์ด๋ฃจ๋ ค๋ฉด |
| 16 | +์์์ ๋ฐฐ์ด A[i,j] ์ ๋ฐฐ์ด A[j,k] ์ ์กฐํฉ๋ค๋ก ์ด๋ฃจ์ด์ ธ์ผ ํ๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๊ฐ๊ฐ์ ๋ฐฐ์ด์์ A[j] - A[i]์ A[k] - A[j]๋ ๊ฐ์์ผ ํ๋ค. |
| 17 | + |
| 18 | + |
| 19 | +dp[(i, diff)] ๋ i ๋ฒ์งธ ์ธ๋ฑ์ค์ i ๋ฒ์งธ ์ธ๋ฑ์ค์์ i+1 ~ k ์ธ๋ฑ์ค์์ ๋น๊ต๊ฐ diff ์ count ๋ฅผ ์๋ฏธํ๋ค. |
| 20 | + |
| 21 | +์๋ก ๋ณด๋ฉด dp[(1, 3)] ์ A[1] ์ธ 4์์ +3 ์ด ๋์จ ํ์์ด๋ค. (๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ฐ์ A[2] ์ธ 7์์ count ๋์์ ๊ฒ์ด๋ค.) |
| 22 | +๊ทธ๋ฆฌ๊ณ ๋ค์ ๋ฃจํ์์ dp[(2, 3)] ์ด๋ ๊ฐ์ด ๋์ฌ ํ
๋ฐ, ์ฌ๊ธฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก A[2] ์ A[4] ์ ์ฐจ์ด +3 ์ด ๋์จ count ๋ค. |
| 23 | + |
| 24 | +> ์ฝ๋์์๋ 4-7 ์ ํด์ ์ฌ์ค์ -3 ์ด๋ ๊ฐ์ด ๋ค์ด๊ฐ์ง๋ง ์ค๋ช
์์ ํท๊ฐ๋ฆฌ๋ฏ๋ก +3 ์ด๋ผ๊ณ ํ๋ค. ์ด์ฐจํผ abs ํ์ง ์๋ ์ด์ diff ๋ ์๊ด ์๋ค. |
| 25 | +
|
| 26 | +์ด๊ฑธ ์ฝ๋๋ก ๋ณด๋ฉด ์๋์ ๊ฐ๋ค |
| 27 | + |
| 28 | +```python3 |
| 29 | +dp[(j, diff)] = dp[(i, diff)] + 1 |
| 30 | +``` |
| 31 | + |
| 32 | +i ๋ฒ์งธ์์ ๋ฐ์ํ diff ์นด์ดํ
ํ ๊ฐ์ 1์ ๋ํ๋ฉด j ๋ฒ์งธ ๋ฐ์ํ diff ์นด์ดํ
์ด ๋๋ค๋ ๊ฒ์ด๋ค. diff ๋ ๊ฐ์์ผ ํ๊ณ (arithmetic sequence!) |
| 33 | +๋ถ๋ถ ๋ฐฐ์ด์ ์กฐํฉ์ ์๊ฐํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. (์๋ฅผ ๋ค๋ฉด `[4, 7, 11, 14]` ์์ 4์ 7์ +3, 11๊ณผ 14๋ +3 ์ด์ง๋ง 4๊ฐ๋ฅผ ๊ฐ์ด ๋ดค์ ๋ +3 ์ผ๋ก ์ด๋ฃจ์ด์ง ์ํ์ค๋ ์๋๋ค!) |
| 34 | + |
| 35 | + |
| 36 | +์์ ์์ ๋์๋ `[9, 4, 7, 2, 10]` ์ ๊ฒฐ๊ณผ ๋ฐฐ์ด `[4, 7, 10]` ์ ๊ธธ์ด ๊ฐ์ |
| 37 | + |
| 38 | +1. dp[(2, 3)] ์นด์ดํ
(์ฝ๋์์ 2๋ฅผ ๋ฃ์ด์ค) |
| 39 | +2. dp[(4, 3)] = dp[(2, 3)] + 1 |
| 40 | + |
| 41 | +์ฒ๋ผ ๋๋ค. |
| 42 | + |
| 43 | + |
| 44 | +### ์ฝ๋ |
| 45 | +```python3 |
| 46 | +class Solution: |
| 47 | + def longestArithSeqLength(self, A: List[int]) -> int: |
| 48 | + dp = defaultdict(int) |
| 49 | + result = 0 |
| 50 | + |
| 51 | + for i in range(len(A) - 1): |
| 52 | + for j in range(i + 1, len(A)): |
| 53 | + diff = A[i] - A[j] |
| 54 | + if (i, diff) in dp: |
| 55 | + dp[(j, diff)] = dp[(i, diff)] + 1 |
| 56 | + else: |
| 57 | + dp[(j, diff)] = 2 |
| 58 | + result = max(result, dp[(j, diff)]) |
| 59 | + |
| 60 | + return result |
| 61 | +``` |
| 62 | + |
| 63 | +i ๋ฒ์งธ์์ diff ๋ ๊ฐ์ด ์์ ๋ 2๋ฅผ ๋ฃ์ด์ค ์ด์ ๋ ๋ฐฐ์ด์ด [4, 10] ๋ง ์๋ค๊ณ ๋ณด๋ฉด +5 ๋ก ๊ฒฐ๊ณผ ๊ฐ์ด 2๊ฐ ๋๊ธฐ ๋๋ฌธ์ด๋ค. |
| 64 | +์ฆ ๋ฐฐ์ด์ ์ฌ์ด์ฆ๊ฐ 0 ๋๋ 1์ด ์๋ ์ด์ ๋ฌด์กฐ๊ฑด ์ต์ ๊ฐ์ 2๊ฐ ๋๋ค. |
0 commit comments