[인프런] 카카오 캐시 문제 변형

Liam·2022년 1월 4일
0

알고리즘

목록 보기
2/2

삽입정렬 문제이나, 처음에 삽입정렬을 구현하지 않고 자바스크립 내장 함수들을 이용하여 알고리즘을 풀었다. 답은 맞았으나 삽입정렬로 한번 더 구현해봤다.

삽입정렬 사용 안함
      function moveToFront(arr, n) {
        let idx = arr.indexOf(n);
        for (let i = idx; i > 0; i--) {
          [arr[i - 1], arr[i]] = [arr[i], arr[i - 1]];
        }
      }
      function solution(input, m) {
        let s = m[0];
        let n = m[1];
        let arr = [];
        for (let i = 0; i < s; i++) {
          for (let j = 0; j < n; j++) {
            if (arr.length < s && arr.indexOf(input[j]) != -1) {
              moveToFront(arr, input[j]);
            } else if (arr.length < s && arr.indexOf(input[j]) == -1) {
              arr.unshift(input[j]);
            } else if (arr.length == s && arr.indexOf(input[j]) != -1) {
              moveToFront(arr, input[j]);
            } else if (arr.length == s && arr.indexOf(input[j]) == -1) {
              arr.unshift(arr, input[j]);
              arr.pop();
            }
          }
        }
        return arr;
      }
      let input = [1, 2, 3, 2, 6, 2, 3, 5, 7];
      let n = [5, 9];
      console.log(solution(input, n));

삽입정렬 사용

   function solution(size, arr){
       let answer=Array.from({length:size}, ()=>0);
       arr.forEach(x => {
           let pos=-1;
           for(let i=0; i<size; i++) if(x===answer[i]) pos=i;
           if(pos===-1){
               for(let i=size-1; i>=1; i--){
                   answer[i]=answer[i-1];
               }
           }
           else{
               for(let i=pos; i>=1; i--){
                   answer[i]=answer[i-1];
               }
           } 
           answer[0]=x;  
       });
       return answer;
   }
   let arr=[1, 2, 3, 2, 6, 2, 3, 5, 7];
   console.log(solution(5, arr));
profile
🚀티끌모아 백엔드 개발자

0개의 댓글