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

3.Special Sort(버블정렬응용)

crab. 2022. 7. 1. 07:42

📌강의 정리

한 가지의 방법은 반복을 두 번 하는데, 첫번째 반복에서는 음수만 answer에 push하고

그 다음반복에는 양수만 answer에 push하는 것이다.

하지만 정렬의 정의에는 해당하지 않으므로 버블정렬을 사용하면

반복하며 앞과 뒤만 비교해서 양수, 음수면 바꾸고 양수양수, 음수음수면 가만히둔다.

 

📌느낀점

처음부터 뭔가 이상하긴 했다.

내가 본 문제제목에는 버블정렬응용이란 말이 없었는데… 알았다면 조금 쉬웠겠지만

만약 내가 진짜 구글인터뷰를 한다면 거기서 버블정렬응용하란 말은 안했을테니 같은 상황인 것 같다.

결국 나는 공간복잡도를 2개 늘리면서 정렬의 의미와는 멀어졌다.

이건 문제를 푼게 아니다… 다음에는 정렬에 맞게 풀어볼 수 있도록 하자.

 

//나의 코드
<html>
  <head>
    <meta charset="UTF-8" />
    <title>출력결과</title>
  </head>
  <body>
    <script>
      function solution(arr) {
        let answer = [];
        let arr1 = [];
        let arr2 = [];
        for (let x of arr) {
          if (x > 0) arr2.push(x);
          else arr1.push(x);
        }
        answer = arr1.concat(arr2);
        return answer;
      }
      //새 배열 두개 만들고
      //기존 배열 반복하며 0보다 작으면 배열1에
      //0보다 크면 배열2에 push하고
      //두 배열을 합친다.
      let arr = [1, 2, 3, -3, -2, 5, 6, -6];
      console.log(solution(arr));
    </script>
  </body>
</html>
//강사님 코드
<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(arr){
                let answer=arr;
                for(let i=0; i<arr.length-1; i++){
                    for(let j=0; j<arr.length-i-1; j++){
                        if(arr[j]>0 && arr[j+1]<0){
                            [arr[j], arr[j+1]]=[arr[j+1], arr[j]];
                        }
                    }   
                } 
                return answer;
            }

            let arr=[1, 2, 3, -3, -2, 5, 6, -6];
            console.log(solution(arr));
        </script>
    </body>
</html>

<html>
    <head>
        <meta charset="UTF-8">
        <title>출력결과</title>
    </head>
    <body>
        <script>
            function solution(arr){
                let answer=[];
                for(let x of arr){
                    if(x<0) answer.push(x);
                }
                for(let x of arr){
                    if(x>0) answer.push(x);
                }
                return answer;
            }

            let arr=[1, 2, 3, -3, -2, 5, 6, -6];
            console.log(solution(arr));
        </script>
    </body>
</html>