알고리즘

Special Sort(구글 인터뷰)

살다보니개발자 2022. 12. 18. 18:09

N개의 정수가 입력되면 당신은 입력된 값을 정렬해야 한다.
음의 정수는 앞쪽에 양의정수는 뒷쪽에 있어야 한다. 또한 양의정수와 음의정수의 순서에는 변함이 없어야 한다.

 

 

 

입력예제

1 2 3 -3 -2 5 6 -6

 

 

출력예제

-3 -2 -6 1 2 3 5 6

 

 

 

풀이

 

function solution(arr) {

    // answer에 arr 얕은복사 , arr 값이 바뀌면 answer 도 바뀜.
    let answer = arr;

    // 기존의 버블정렬 형태로 이중 for문 실행, 맨마지막 인덱스는 비교할 인덱스가 없으니 arr.length - 1 까지만 For문 실행
    for (let i = 0; i < arr.length - 1; i++) {

        //버블 정렬의 형태기 때문에 마찬가지로
        // 비교가 완료된 맨마지막 index 는 비교할 필요가 없기 때문에 arr.length - i - 1; 까지 For문을 실행한다.
        for (let j = 0; j < arr.length - i - 1; j++) {

            // 앞에있는 인덱스 arr[j]  가 양수이고 , 뒤에있는 인덱스 arr[j + 1] 가 음수일때
            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));