문제 개요
JavaScript에서 입력값에 따라 다차원(2차원) 배열을 생성하는 함수를 작성해야 합니다. 이 함수는 다음과 같은 세 가지 인자를 받습니다.
- row — 배열 안에 포함될 하위 배열(subarray)의 개수
- col — 각 하위 배열이 가질 요소의 개수
- val — 각 요소에 채워질 값
예를 들어, 세 가지 입력값이 각각 2, 3, 10이라면 출력 결과는 다음과 같아야 합니다.
const output = [[10, 10, 10], [10, 10, 10]];
즉, 하위 배열이 2개(row) 있고, 각 하위 배열은 요소를 3개씩(col) 가지며, 모든 요소는 10(val)으로 채워집니다.
구현 방법 1: 반복문 사용
가장 기본적인 접근 방식은 중첩 반복문을 사용하는 것입니다. 바깥쪽 반복문으로 하위 배열을 만들고, 안쪽 반복문으로 각 요소에 값을 할당합니다.
const row = 2;
const col = 3;
const val = 10;
const constructArray = (row, col, val) => {
const res = [];
for(let i = 0; i < row; i++){
for(let j = 0; j < col; j++){
if(!res[i]){
res[i] = [];
}
res[i][j] = val;
}
}
return res;
};
console.log(constructArray(row, col, val));
출력 결과
위 코드를 실행하면 콘솔에 다음과 같은 결과가 출력됩니다.
[ [ 10, 10, 10 ], [ 10, 10, 10 ] ]
구현 방법 2: Array.from 활용 (더 간결한 방법)
ES6의 Array.from() 메서드를 사용하면 훨씬 간결하게 동일한 결과를 얻을 수 있습니다.
const constructArray = (row, col, val) =>
Array.from({ length: row }, () => Array(col).fill(val));
console.log(constructArray(2, 3, 10));
// [ [ 10, 10, 10 ], [ 10, 10, 10 ] ]
Array.from({ length: row }, ...)는 길이가 row인 새로운 배열을 만들면서, 두 번째 인자로 전달된 콜백 함수의 반환값으로 각 하위 배열을 초기화합니다. 이때 Array(col).fill(val)을 사용해 길이가 col이고 val로 채워진 하위 배열을 생성합니다.
다만 fill()은 객체나 배열처럼 참조 타입인 값을 채울 때 모든 요소가 같은 객체를 공유하므로 주의해야 합니다. 숫자나 문자열 같은 원시 타입에는 문제없이 사용할 수 있습니다.