ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

๋ฌธ์ œ

N๊ฐœ์˜ ์ž์—ฐ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ ์ˆ˜์—ด์ด ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ทธ ์ค‘์—์„œ ๊ฐ€์žฅ ๊ธธ๊ฒŒ ์ฆ๊ฐ€ํ•˜๋Š”(์ž‘์€ ์ˆ˜์—์„œ ํฐ ์ˆ˜๋กœ) ์›์†Œ๋“ค์˜ ์ง‘ํ•ฉ์„ ์ฐพ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜๋ผ. ์˜ˆ๋ฅผ ๋“ค์–ด, ์›์†Œ๊ฐ€ 2, 7, 5, 8, 6, 4, 7, 12, 3 ์ด๋ฉด ๊ฐ€์žฅ ๊ธธ๊ฒŒ ์ฆ๊ฐ€ํ•˜๋„๋ก ์›์†Œ๋“ค์„ ์ฐจ๋ก€๋Œ€๋กœ ๋ฝ‘์•„๋‚ด๋ฉด 2, 5, 6, 7, 12๋ฅผ ๋ฝ‘์•„๋‚ด์–ด ๊ธธ์ด๊ฐ€ 5์ธ ์ตœ๋Œ€ ๋ถ€๋ถ„ ์ฆ๊ฐ€ ์ˆ˜์—ด์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

๋ฌธ์ œํ’€์ด

์ตœ์žฅ ์ฆ๊ฐ€ ๋ถ€๋ถ„ ์ˆ˜์—ด(LIS, Longest Increasing Subsequence)

  • ์›์†Œ๊ฐ€ n๊ฐœ์ธ ๋ฐฐ์—ด์˜ ์ผ๋ถ€ ์›์†Œ๋ฅผ ๊ณจ๋ผ๋‚ด์„œ ๋งŒ๋“  ๋ถ€๋ถ„ ์ˆ˜์—ด ์ค‘, ๊ฐ ์›์†Œ๊ฐ€ ์ด์ „ ์›์†Œ๋ณด๋‹ค ํฌ๋‹ค๋Š” ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๊ณ , ๊ทธ ๊ธธ์ด๊ฐ€ ์ตœ๋Œ€์ธ ๋ถ€๋ถ„ ์ˆ˜์—ด์„ ์ผ์ปซ์Œ

ํ•ด๋‹น ๋ฌธ์ œ์—์„œ ๊ธธ์ด๊ฐ€ ์ตœ๋Œ€์ธ ๋ถ€๋ถ„์ˆ˜์—ด์˜ ๊ฐ’๋งŒ์„ ์ฐธ์กฐํ•˜์—ฌ 1์„ ๊ฐ€์‚ฐํ•œ๋‹ค๋Š” ํ’€์ด๋Š” ๋‹ค์Œ ํฌ์ŠคํŒ…์˜ ๋ฌธ์ œ๋ฅผ ํ’€์–ด ๋ด„์œผ๋กœ์จ ์ข€ ๋” ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

https://choi95.tistory.com/33?category=854389 

 

๋ณด์ด๋Š” ํ•™์ƒ

 ์„ ์ƒ๋‹˜์ด N(1<=N<=1000)๋ช…์˜ ํ•™์ƒ์„ ์ผ๋ ฌ๋กœ ์„ธ์› ๋‹ค. ์ผ๋ ฌ๋กœ ์„œ ์žˆ๋Š” ํ•™์ƒ์˜ ํ‚ค๊ฐ€ ์•ž์—์„œ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๋งจ ์•ž์— ์„œ ์žˆ๋Š” ์„ ์ƒ๋‹˜์ด ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ•™์ƒ์˜ ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ ์ž ํ•œ๋‹ค. (์•ž์— ์„œ ์žˆ๋Š”

choi95.tistory.com

 

์ฝ”๋“œ

function solution(arr) {
  let answer = 0;
  let dy = Array.from({length: arr.length}, () => 0);
  dy[0] = 1;

  for(let i = 1; i < arr.length; i++) {
    let max = 0; //์–ด๋– ํ•œ ์›์†Œ์˜ ๊ฐ’๋ณด๋‹ค ํฌ์ง€ ์•Š์„ ๊ฒฝ์šฐ ๊ทธ ๊ฐ’์ด ์ž๊ธฐ ์ž์‹ ๋งŒ์„ ํฌํ•จํ•œ ๊ฒฝ์šฐ์˜ ์ˆ˜์ธ 1๋กœ ์ดˆ๊ธฐํ™” ๋  ์ˆ˜ ์žˆ๋„๋ก
    for(let j = i - 1; j >= 0; j--) {
      if(arr[i] > arr[j] && dy[j] > max) { //์ด์ „ ์›์†Œ๋ณด๋‹ค ํฌ๊ณ  ํ•ด๋‹น ์›์†Œ์˜ ๋ถ€๋ถ„์ˆ˜์—ด์ด ์ตœ์žฅ์ผ ๊ฒฝ์šฐ
        max = dy[j];
      }
    }
    dy[i] = max + 1;
  }
  answer = Math.max(...dy);
  return answer;
}

let arr = [5, 3, 7, 8, 6, 2, 9, 4];
console.log(solution(arr));

function solution(arr){  
                let answer=0;
                let dy=Array.from({length:arr.length}, ()=>0);
                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] && dy[j]>max){
                            max=dy[j];
                        }
                    }
                    dy[i]=max+1;
                    answer=Math.max(answer, dy[i]);
                }
                return answer;
            }

            let arr=[5, 3, 7, 8, 6, 2, 9, 4];
            console.log(solution(arr));
๋Œ“๊ธ€
๊ณต์ง€์‚ฌํ•ญ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€
Total
Today
Yesterday
๋งํฌ
TAG
more
ยซ   2024/10   ยป
์ผ ์›” ํ™” ์ˆ˜ ๋ชฉ ๊ธˆ ํ† 
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
๊ธ€ ๋ณด๊ด€ํ•จ