JS 알고리즘 문제풀이/섹션 7. 정렬과 그리디, 결정알고리즘

6.장난꾸러기 현수

crab. 2022. 7. 4. 08:01
반응형

📌강의 정리

주어진 배열을 정렬한 배열을 새로만들고, 만든 배열과 처음 배열을 비교해 다른 숫자의 인덱스들을 answer에 push한다.

 

📌느낀점

내가 그동안 정렬에 너무 심취해 있었나보다..

나의 풀이가 시간복잡도는 조금 더 좋지만 더 복잡하다.

간단하게 풀 수 있고 별다른 조건이없다면 간결하고 직관적인 풀이를 생각해보자.

 

//나의 코드
<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function solution(arr) {
        let answer = [];
        let cnt = (res = 0);
        for (let i = arr.length; i > 0; i--) {
          if (arr[i] < arr[i - 1]) {
            [arr[i], arr[i - 1]] = [arr[i - 1], arr[i]];
            cnt++;
            res = i;
          }
        }
        answer.push(res), answer.push(res + cnt);
        return answer;
      }
      //삽입정렬을 하며 처음 이동했을때 cnt하며 res를 i값으로 계속 업데이트한다.
      //이 정렬이 멈췄을때의 res와 res에 cnt+한 값을 push한다.
      let arr = [120, 125, 152, 130, 135, 135, 143, 127, 160];
      console.log(solution(arr));
    </script>
  </body>
</html>
//강사님 코드
<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function solution(arr) {
        let answer = [];
        let sortArr = arr.slice();
        sortArr.sort((a, b) => a - b);
        for (let i = 0; i < arr.length; i++) {
          if (arr[i] !== sortArr[i]) answer.push(i + 1);
        }
        return answer;
      }

      let arr = [120, 125, 152, 130, 135, 135, 143, 127, 160];
      console.log(solution(arr));
    </script>
  </body>
</html>
반응형