문제 이해하기
두 개의 숫자 m과 n을 입력받아, 크기가 n인 배열을 반환하는 JavaScript 함수를 작성해야 합니다. 조건은 배열의 모든 요소를 더했을 때 그 합이 정확히 m이 되어야 한다는 것입니다.
가장 직관적인 해결 방법은 합계(m)를 배열 길이(n)로 나눈 값을 모든 요소에 균등하게 배분하는 것입니다. 요소들이 모두 같은 값을 가지면 전체 합은 자연스럽게 m과 일치하게 됩니다.
코드 구현
다음은 이 로직을 구현한 코드입니다.
const len = 8;
const sum = 5;
const splitNumber = (len, sum) => {
const res = [];
for(let i = 0; i < len; i++){
res.push(sum / len);
};
return res;
};
console.log(splitNumber(len, sum));출력 결과
콘솔에 출력되는 결과는 다음과 같습니다.
[ 0.625, 0.625, 0.625, 0.625, 0.625, 0.625, 0.625, 0.625 ]
코드 동작 원리
- 먼저 빈 배열
res를 생성합니다. for반복문으로 배열 길이(len)만큼 순회하면서 매번sum / len값을 배열에 추가(push)합니다.- 모든 요소가 동일한 값을 가지므로, 요소들의 총합은 자동으로
sum과 일치합니다.
예제에서 길이는 8, 합은 5입니다. 5 ÷ 8 = 0.625이므로 0.625가 8개 담긴 배열이 생성됩니다. 실제로 0.625 × 8 = 5로 합이 정확히 일치하는 것을 확인할 수 있습니다.
더 간결한 대안: fill() 메서드 활용
반복문 없이 더 짧은 코드로 같은 결과를 얻고 싶다면 fill() 메서드를 활용할 수 있습니다.
const splitNumber = (len, sum) => Array(len).fill(sum / len); console.log(splitNumber(8, 5)); // [0.625, 0.625, 0.625, 0.625, 0.625, 0.625, 0.625, 0.625]
Array(len)으로 길이가 n인 빈 배열을 만든 뒤, fill()로 모든 요소를 sum / len 값으로 채우는 방식입니다. 한 줄로 해결할 수 있어 가독성 면에서 유리합니다.