const arr = [1, 2, 3, -3, -2, 5, 6, -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문은 직관적으로 이해가 가능하다
어떤 배열이 주어지던간에 올바른 결과값이 나와야 하므로 최악의 경우를 생각해보았다
음수가 하나고 제일 뒤에 있을 때 배열의 길이가 n이라면 n-1번의 반복문을 돌려야 제일 뒤 음수가 제일 앞으로 갈 수가 있었다
출처 인프런 자바스크립트 알고리즘 문제풀이