๐ ์ต๋ ๋ถ๋ถ ์ฆ๊ฐ์์ด(LIS)
N๊ฐ์ ์์ฐ์๋ก ์ด๋ฃจ์ด์ง ์์ด์ด ์ฃผ์ด์ก์ ๋, ๊ทธ์ค์์ ๊ฐ์ฅ ๊ธธ๊ฒ ์ฆ๊ฐํ๋(์์ ์์์ ํฐ ์๋ก) ์์๋ค์ ์งํฉ์ ์ฐพ๋ ๋ฌธ์ ์ด๋ค. ์๋ฅผ ๋ค์ด, ์์๊ฐ 2, 7, 5, 8, 6, 4, 7, 12, 3์ด๋ฉด ๊ฐ์ฅ ๊ธธ๊ฒ ์ฆ๊ฐํ๋๋ก ์์๋ค์ ์ฐจ๋ก๋๋ก ๋ฝ์๋ด๋ฉด 2, 5, 6, 7, 12๋ฅผ ๋ฝ์๋ด์ด ๊ธธ์ด๊ฐ 5์ธ ์ต๋ ๋ถ๋ถ ์ฆ๊ฐ ์์ด์ ๋ง๋ค ์ ์๋ค.
์ ๋ ฅ์ค๋ช
์ฒซ์งธ ์ค์ ์ ๋ ฅ๋๋ ๋ฐ์ดํฐ์ ์ N(1<=N<=1,000, ์์ฐ์)๋ฅผ ์๋ฏธํ๊ณ , ๋์งธ ์ค์ N๊ฐ์ ์ ๋ ฅ๋ฐ์ดํฐ๋ค์ด ์ฃผ์ด์ง๋ค.
๋์งธ ์ค์ N๊ฐ์ ์ ๋ ฅ๋ฐ์ดํฐ๋ค์ด ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ์ค๋ช
์ฒซ ๋ฒ์งธ ์ค์ ๋ถ๋ถ ์ฆ๊ฐ ์์ด์ ์ต๋ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค.
์ ๋ ฅ์์ | ์ถ๋ ฅ์์ |
8 5 3 7 8 6 2 9 4 |
4 |
๐ ํ์ด ๋ฐฉ๋ฒ
arr[ i ](์ธ๋ฑ์ค) - ์ฆ๊ฐ ์์ด์์ ๋ง์ง๋ง ํญ์ ํด๋นํ๋ ์ซ์
dy[ i ] - arr[ i ] (i ๋ฒ์งธ ์์)๊ฐ ์์ด์ ๋ง์ง๋ง ํญ์ ํด๋นํ๋ค๋ ์กฐ๊ฑดํ์ ๋ถ๋ถ ์ฆ๊ฐ ์์ด์ ๊ธธ์ด
- arr[3]์ ํด๋นํ๋ ์์ 8์ด ์ฆ๊ฐ ์์ด์ ๋ง์ง๋ง ํญ์ ํด๋นํ๋ ์ซ์๋ก ์์ ์กด์ฌํ๋ ์์๋ค๊ณผ ๋น๊ตํ๋ค.
- ์์ ์กด์ฌํ๋ ์์ ์ค arr[3]๋ณด๋ค ์์ผ๋ฉด์ ๋ถ๋ถ ์ฆ๊ฐ ์์ด์ ๊ธธ์ด๊ฐ ๊ฐ์ฅ ๊ธด ๊ธธ์ด์ 1(์๊ธฐ ์์ ํฌํจ)์ ๋ํ ๊ฐ์ dy[3]์ ์ ์ฅํ๋ค.
- ์ ๊ณผ์ ์ ๋ฐ๋ณตํ ํ dy ๋ฐฐ์ด์ ์์ ์ค ์ต๋ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ค.
function solution(arr) {
let answer = 0;
let dy = Array.from({ length: arr.length }, () => 0);
// arr[0] ์์ ์์๊ฐ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ์ฆ๊ฐ ์์ด์ ์๊ธฐ ์์ ๋ง ํฌํจํ๋ฏ๋ก 1๋ก ์ด๊ธฐํ
dy[0] = 1;
for (let i = 1; i < arr.length; i++) {
let max = 0;
for (let j = i - 1; j >= 0; j--) {
if (arr[j] < arr[i] && max < dy[j]) {
max = dy[j];
}
}
dy[i] = max + 1;
}
answer = Math.max(...dy);
return answer;
}
let arr = [2, 7, 5, 8, 6, 4, 7, 12, 3];
console.log(solution(arr));
'Algorithm > ์ธํ๋ฐ(inflearn)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript/section 10] 05 - ์ต๋์ ์ ๊ตฌํ๊ธฐ (0) | 2022.12.26 |
---|---|
[JavaScript/section 10] 04 - ๋์ ๊ตํ (0) | 2022.12.22 |
[JavaScript/section 10] 02 - ๋๋ค๋ฆฌ ๊ฑด๋๊ธฐ (0) | 2022.12.19 |
[JavaScript/section 10] 01 - ๊ณ๋จ์ค๋ฅด๊ธฐ (0) | 2022.12.17 |
[JavaScript/section 9] 07 - ์ฌ๋๋ผ ์์ผ๋๋(BFS) (0) | 2022.11.28 |