문제 소개
숫자 배열에 0과 1, 그리고 그 외의 다른 숫자들이 섞여 있다고 가정해 보겠습니다. 이때 자바스크립트 함수를 작성하여 배열 안의 모든 1은 맨 앞으로, 모든 0은 맨 뒤로 이동시켜야 하며, 나머지 숫자들은 원래 순서를 유지한 채 중간에 위치해야 합니다.
해결 코드
아래 예제를 통해 이 문제를 해결하는 함수를 살펴보겠습니다.
const arr = [3, 2, 1, 8, 9, 0, 1, 9, 0, 2, 1, 0, 2, 0, 1, 0, 1, 1, 4, 0, 3];
const segregate = arr => {
const copy = arr.slice();
for(let i = 0; i < copy.length; i++){
if(copy[i] === 0){
copy.push(copy.splice(i, 1)[0]);
} else if(copy[i] === 1){
copy.unshift(copy.splice(i, 1)[0]);
};
continue;
};
return copy;
};
console.log(segregate(arr));코드 동작 방식
이 함수는 다음과 같은 단계로 동작합니다.
arr.slice()를 사용하여 원본 배열은 그대로 유지하고 복사본을 만들어 작업합니다.- 배열을 순회하면서 요소가 0이면
splice()로 해당 요소를 제거한 뒤push()를 통해 배열의 맨 끝에 추가합니다. - 요소가 1이면 마찬가지로 제거한 후
unshift()를 통해 배열의 맨 앞에 추가합니다. - 그 외의 숫자는 아무 처리 없이 그대로 두고 다음 요소로 넘어갑니다.
실행 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
[
1, 1, 1, 3, 2, 8, 9,
1, 9, 2, 2, 1, 1, 4,
3, 0, 0, 0, 0, 0, 0
]결과를 확인해 보면 모든 1이 배열의 앞부분에, 모든 0이 뒷부분에 배치되었고, 나머지 숫자들(3, 2, 8, 9 등)은 상대적인 순서를 유지한 채 중간에 위치한 것을 알 수 있습니다.