Special sort (버블정렬 응용)

.·2021년 8월 16일
0

알고리즘

목록 보기
18/21

주어진 배열

const arr = [1, 2, 3, -3, -2, 5, 6, -6];

조건

  1. 음수를 앞으로, 양수를 뒤로 정렬하세요
  2. 기존음수와 양수의 위치는 바꾸지 마세요
    예상 결과값: [-3, -2, -6, 1, 2, 3, 5, 6]

사실 쉬운방법은 for 문을 2번 돌리고 첫번째 for문은 음수일때 정답배열에 push
2번째 for문일 때는 양수일때 정답배열에 push해주면 된다
하지만 이 문제의 조건은 기존 정렬 방법은 사용하는 것이다

      function solution(arr) {
        let answer = arr;
        for (let i = 0; i < arr.length - 2; i++) {
          for (let j = 0; j < arr.length - 1; j++) {
            if (arr[j] > 0 && arr[j + 1] < 0)
              [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
          }
        }
        return answer;
      }

기존 양수, 음수의 순서는 바꾸지 않기 위해서 앞이 양수, 뒤가 음수인 경우에만 위치를 바꿔주었다
j에 대한 for문은 직관적으로 이해가 가능하다

i 에 대한 for문을 왜 n-1번 돌려줘야 하는가?

어떤 배열이 주어지던간에 올바른 결과값이 나와야 하므로 최악의 경우를 생각해보았다
음수가 하나고 제일 뒤에 있을 때 배열의 길이가 n이라면 n-1번의 반복문을 돌려야 제일 뒤 음수가 제일 앞으로 갈 수가 있었다

출처 인프런 자바스크립트 알고리즘 문제풀이

profile
Divde & Conquer

0개의 댓글

관련 채용 정보