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

JavaScript 배열에서 누락된 값을 0으로 채우는 알고리즘

이번 글에서는 JavaScript에서 배열의 빈 자리를 0으로 동적으로 채우는 알고리즘을 살펴보겠습니다. 이 문제는 월(month) 데이터를 다룰 때 자주 마주치는 상황으로, 실무에서도 유용하게 활용할 수 있습니다.

문제 정의

1부터 12 사이의 숫자(양 끝값 포함)로 이루어진 months 배열이 주어집니다. 이 배열은 12개보다 적은 요소를 가질 수 있습니다. 우리가 해야 할 일은 이 배열을 받아서 항상 12개의 요소를 가진 완전한 월 배열을 만드는 것입니다. 원본 배열에 해당 월이 존재하면 그 값을 그대로 사용하고, 존재하지 않으면 그 자리에 0을 채워 넣습니다.

예를 들어 다음과 같습니다.

입력 → [5, 7, 9]
출력 → [0, 0, 0, 0, 5, 0, 7, 0, 9, 10, 0, 0]

해결 방법

핵심 아이디어는 간단합니다. 1부터 12까지 반복하면서 현재 숫자가 원본 배열에 포함되어 있는지 확인하고, 포함되어 있다면 해당 값을 새 배열에 추가하고, 없다면 0을 추가하는 것입니다.

코드 예제

const months = [6, 7, 10, 12];

const completeMonths = (arr) => {
  const completed = [];
  for (let i = 1; i <= 12; i++) {
    if (arr.includes(i)) {
      completed.push(i);
    } else {
      completed.push(0);
    }
  }
  return completed;
};

console.log(completeMonths(months));

동작 원리

위 코드는 1부터 12까지 차례대로 반복하면서, 매번 Array.prototype.includes() 메서드를 사용해 원본 배열에 현재 숫자가 있는지 검사합니다. 값이 존재하면 그 값을 새 배열에 push하고, 존재하지 않으면 0을 push합니다. 이렇게 하면 입력 배열의 요소 개수와 관계없이 항상 길이가 12인 배열을 얻을 수 있습니다.

실행 결과

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

[
  0, 0, 0, 0, 0,
  6, 7, 0, 0, 10,
  0, 12
]

추가 팁: 더 간결한 대안

같은 로직을 Array.from()과 삼항 연산자를 사용해 한 줄로 표현할 수도 있습니다.

const completeMonths = (arr) =>
  Array.from({ length: 12 }, (_, i) => arr.includes(i + 1) ? i + 1 : 0);

이 방식은 코드가 더 짧아지고 함수형 스타일을 선호하는 프로젝트에서 가독성이 좋습니다. 다만 데이터 크기가 커지면 includes() 호출이 반복되므로 성능이 중요한 경우에는 Set을 활용해 조회 속도를 높이는 것도 고려해 볼 수 있습니다.