Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

JavaScript로 세 자리 숫자를 배열 맨 앞으로 이동하는 방법

문제 개요

숫자로 이루어진 배열을 입력받아, 배열 안에 있는 모든 세 자리 정수(100~999)를 배열의 맨 앞으로 이동시키는 JavaScript 함수를 작성해야 합니다.

예를 들어 다음과 같은 숫자 배열이 있다고 가정해 보겠습니다.

const numList = [1, 324, 34, 3434, 304, 2929, 23, 444];

함수 실행 후에는 세 자리 숫자(324, 304, 444)가 모두 배열 앞쪽으로 옮겨져야 합니다.

해결 아이디어

이 문제는 배열 메서드 두 개만으로 손쉽게 해결할 수 있습니다.

  • splice(i, 1): 인덱스 i에 있는 요소를 배열에서 제거하고, 제거된 요소를 반환합니다.
  • unshift(): 전달된 요소를 배열의 맨 앞에 추가합니다.

즉, 배열을 처음부터 끝까지 순회하면서 세 자리 숫자를 만날 때마다 해당 요소를 잘라낸 뒤 배열 맨 앞에 삽입하면 됩니다.

구현 코드

먼저, 숫자가 세 자리인지 판별하는 헬퍼 함수를 정의합니다. 세 자리 수는 99보다 크고 1000보다 작은 수입니다.

const numList = [1, 324, 34, 3434, 304, 2929, 23, 444];

// 세 자리 숫자 여부 확인
const isThreeDigit = num => num > 99 && num < 1000;

// 세 자리 숫자를 배열 맨 앞으로 이동
const bringToFront = arr => {
    for(let i = 0; i < arr.length; i++){
        if(!isThreeDigit(arr[i])){
            continue;
        };
        arr.unshift(arr.splice(i, 1)[0]);
    };
};

bringToFront(numList);
console.log(numList);

실행 결과

위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.

[
  444, 304,  324,
    1,  34, 3434,
 2929,  23
]

동작 원리 살펴보기

순회 중 세 자리 숫자를 발견하면 splice(i, 1)로 해당 요소를 제거하고, 반환값은 배열 형태이므로 [0]으로 실제 값을 꺼낸 후 unshift()로 맨 앞에 삽입합니다. 나머지 요소들은 자동으로 한 칸씩 밀려나기 때문에 별도의 인덱스 조정 없이도 전체 순회가 정상적으로 진행됩니다.

참고로, 새로운 요소가 항상 맨 앞에 삽입되기 때문에 세 자리 숫자들 사이의 원래 순서는 역순으로 바뀌게 됩니다. 원래 순서를 유지하고 싶다면 필터링 후 세 자리 숫자 배열과 그 외 숫자 배열을 합치는 방식(filter + concat)을 사용하는 것이 좋습니다.