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

JavaScript에서 숫자를 k 길이 배열로 나누는 방법

JavaScript에서 두 개의 숫자, 예를 들어 mk를 입력받아 크기가 k인 배열을 반환하되, 배열의 모든 요소를 더했을 때 그 합이 정확히 m이 되도록 하는 함수를 작성해야 합니다.

가장 간단하고 직관적인 접근 방식은 목표 합계를 배열의 길이로 나눈 값을 모든 요소에 균등하게 배분하는 것입니다. 이렇게 하면 각 요소가 동일한 값을 가지게 되고, 전체 합은 자연스럽게 m과 일치하게 됩니다.

예제 코드

해당 기능을 구현한 코드는 다음과 같습니다 −

const len = 30;
const sum = 121;
const splitNumber = (len, sum) => {
    const res = [];  
    for(let i = 0; i < len; i++){
        res.push(sum / len);
    };
    return res;
};
console.log(splitNumber(len, sum));

코드 설명

위 코드의 동작 원리를 단계별로 살펴보면 다음과 같습니다.

  • splitNumber 함수는 배열의 길이(len)와 목표 합계(sum)라는 두 개의 매개변수를 받습니다.
  • 빈 배열 res를 생성한 후, 반복문을 사용하여 sum / len으로 계산된 값을 총 len번 배열에 추가(push)합니다.
  • 모든 요소가 동일한 값을 가지므로, 배열 전체의 합은 정확히 sum이 됩니다.

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다 −

[
    4.033333333333333, 4.033333333333333,
    4.033333333333333, 4.033333333333333,
    4.033333333333333, 4.033333333333333,
    4.033333333333333, 4.033333333333333,
    4.033333333333333, 4.033333333333333,
    4.033333333333333, 4.033333333333333,
    4.033333333333333, 4.033333333333333,
    4.033333333333333, 4.033333333333333,
    4.033333333333333, 4.033333333333333,
    4.033333333333333, 4.033333333333333,
    4.033333333333333, 4.033333333333333,
    4.033333333333333, 4.033333333333333,
    4.033333333333333, 4.033333333333333,
    4.033333333333333, 4.033333333333333,
    4.033333333333333, 4.033333333333333
]

121을 30으로 나누면 약 4.0333이 되므로, 30개의 요소가 모두 동일한 값을 가지며 이들을 모두 더하면 정확히 121이 됩니다.

대안: Array.from 활용하기

전통적인 반복문 대신 ES6에서 도입된 Array.from 메서드를 사용하면 동일한 로직을 한 줄로 더 간결하게 표현할 수 있습니다.

const splitNumber = (len, sum) => Array.from({ length: len }, () => sum / len);

Array.from은 첫 번째 인자로 배열의 길이를 지정하고, 두 번째 인자로 각 요소를 초기화할 매핑 함수를 전달받습니다. 이를 활용하면 코드의 가독성이 향상되고 의도도 더 명확하게 드러납니다.