|
| 1 | +import java.util.ArrayList; |
| 2 | +import java.util.List; |
| 3 | + |
| 4 | +/** |
| 5 | + * ๊ฐ์ฅ ๋จผ์ ๋ค์๋ ์๋ฌธ์ ์ dp๊ฐ 2์ฐจ์ ๋ฐฐ์ด์ด ์๋๊น? ์์ง๋ง, |
| 6 | + * dp๋ฅผ 2์ฐจ์ ์๋ฃ๊ตฌ์กฐ๋ก ์ ์ธํ๋ ๊ฒฝ์ฐ๋ ๊ฒฝ๋ก ์ ์ฅ์ด๋ ์ํ ์ ์ด๊ฐ 2๊ฐ ์ด์์ ์กฐ๊ฑด์ ๋ฐ๋ผ ๋๋ ์ง ๋์ธ๋ฐ |
| 7 | + * ์ด ๋ฌธ์ ๋ 1์ฐจ์์ผ๋ก ํด๊ฒฐ์ด ๊ฐ๋ฅํ ๋ฌธ์ ์
๋๋ค. ๊ฐ์ฅ ์ค์ํ ๊ฑด โ๋ง์ง๋ง ์์ ์์น iโ๋ผ๋ ํ๋์ ์ํ์
๋๋ค. |
| 8 | + * |
| 9 | + * LIS = "์ฃผ์ด์ง ์์ด์์ ์์๋ฅผ ์งํค๋ฉด์ ๊ณ ๋ฅผ ์ ์๋ ์์ ์ค, ๊ฐ์ด ์ ์ ์ปค์ง๋๋ก ์ ํํ์ ๋ ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ๊ธด ๋ถ๋ถ ์์ด." |
| 10 | + * brute force๋ก ์ด์ค for๋ฌธ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋นํจ์จ์ ์
๋๋ค. ๊ทธ๋์ for๋ฌธ + BS๋ฅผ ๊ณ๋ค์์ต๋๋ค. |
| 11 | + * |
| 12 | + * Arrays.binarySearch()๋ ์ ๋ ฌ๋ ๋ฐฐ์ด์์๋ง ๋์ํ๋ฏ๋ก ์ด ๋ฌธ์ ์ ํ
์คํธ ์ผ์ด์ค์ ๋ง์ง ์์ต๋๋ค. |
| 13 | + * |
| 14 | + * ์ ๊ท ๋ฉ์๋: Collections.binarySearch() |
| 15 | + * List ์์ ์์๋ค์ ๋ํด์ ์ด๋ถ ํ์์ ํด์ ํด๋น index๋ฅผ ๋ฐํํฉ๋๋ค. (์์ ๊ฒฝ์ฐ -1) |
| 16 | + * ๋จ, list ์์ ์์๋ค์ ์ ๋ ฌ๋์ด ์์ด์ผ ํฉ๋๋ค (์ด๋ถ ํ์์ ๊ธฐ๋ณธ ์กฐ๊ฑด์ฒ๋ผ) |
| 17 | + * ์ ๊ท ๋ฉ์๋ ํน์ ์ง์ ์ ์ผ๋ก binarySearch() ๋ฉ์๋๋ฅผ ๊ตฌํํด๋ ๋ฉ๋๋ค. ๋ค๋ง ์๋ณธ nums๋ฅผ ์ด๋ถ ํ์ํ๋ ๊ฒ์ด ์๋๋ฉฐ |
| 18 | + * ์ง๊ด์ ์ผ๋ก ๊ฐ๋
์ ์ดํดํ๊ธฐ ์ํด์ ๊ฐํธํ ๋ฉ์๋ ๋ฐฉ์์ธ Collections.binarySearch()๋ฅผ ์ฌ์ฉํ์ต๋๋ค. |
| 19 | + * |
| 20 | + * |
| 21 | + * [ํ
์คํธ ์ผ์ด์ค ๊ณผ์ ์ถ๋ ฅ] |
| 22 | + * 0 |
| 23 | + * [10] |
| 24 | + * 0 |
| 25 | + * [9] |
| 26 | + * 0 |
| 27 | + * [2] |
| 28 | + * 1 |
| 29 | + * [2, 5] |
| 30 | + * 1 |
| 31 | + * [2, 3] |
| 32 | + * 2 |
| 33 | + * [2, 3, 7] |
| 34 | + * 3 |
| 35 | + * [2, 3, 7, 101] |
| 36 | + * 3 |
| 37 | + * [2, 3, 7, 18] |
| 38 | + */ |
| 39 | +import java.util.*; |
| 40 | + |
| 41 | +class Solution { |
| 42 | + public int lengthOfLIS(int[] nums) { |
| 43 | + List<Integer> tails = new ArrayList<>(); // ๊ธธ์ด k์ธ ์ฆ๊ฐ ์์ด์ "๊ผฌ๋ฆฌ ์ต์๊ฐ"๋ค |
| 44 | + |
| 45 | + for (int x : nums) { |
| 46 | + int idx = Collections.binarySearch(tails, x); |
| 47 | + // ํด๋น x ์ซ์๋ฅผ ์ฐพ์ง ๋ชปํ๋ฉด -1์ ๋ฐํํ๋ฉด ์ด๋ list์์ ๋ฒ์์ ๋ฒ์ด๋๊ธฐ ๋๋ฌธ์ |
| 48 | + // ์์๋ฉด ์ฝ์
์์น๋ก ๋ณํํด์ ๋ฒ์ ์์ธ๋ฅผ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค. |
| 49 | + if (idx < 0) idx = -(idx + 1); |
| 50 | + |
| 51 | + // ์ค์ ์ฐ์ฐ์ ๋ํ๊ธฐ์ ๊ต์ฒด์
๋๋ค. |
| 52 | + // ๊ฐ์ฅ ํฌ๋ค๋ ๊ฒ: ์ฃผ์ด์ง ์ธ๋ฑ์ค์ ๊ผฌ๋ฆฌ ๋ฆฌ์คํธ์ ๊ธธ์ด๊ฐ ๊ฐ๋ค. -> ์ subsequence๊ฐ ์๊น๋๋ค. |
| 53 | + // ๊ทธ๋ ์ง ์๋ค๋ ๊ฒ์ ์ต๋๊ฐ๋ณด๋ค ๋ ์์ ๊ฐ์ด ์๋ค๋ ๊ฒ, ๊ทธ ์๋ฆฌ๋ฅผ ์ฃผ์ด์ง x๋ก ๊ต์ฒดํ๋ค. |
| 54 | + // ๊ฒฐ๋ก : ๊ฐ์ฅ ํฌ๋ฉด add, ๊ทธ ์ธ์๋ ์ธ๋ฑ์ค ์๋ฆฌ๋ฅผ x๋ก ๊ต์ฒด |
| 55 | + if (idx == tails.size()) { |
| 56 | + tails.add(x); // ๊ฐ์ฅ ํฌ๋ฉด ๋ค์ ์ถ๊ฐ โ ๊ธธ์ด +1 |
| 57 | + } else { |
| 58 | + tails.set(idx, x); // ์๋๋ฉด ๊ทธ ์๋ฆฌ์ ๊ผฌ๋ฆฌ๋ฅผ ๋ ์์ x๋ก ๊ต์ฒด |
| 59 | + } |
| 60 | + } |
| 61 | + return tails.size(); // ๊ผฌ๋ฆฌ ๋ฆฌ์คํธ ๊ธธ์ด = LIS ๊ธธ์ด |
| 62 | + } |
| 63 | +} |
0 commit comments