배열을 만드는 법은 여러가지가 있습니다.
저는 new Array()와 Array.from()을 사용하여 만듭니다.
2차원 배열을 만들 때도 위의 메서드를 사용하여 만드는데 주의할 점이 있습니다.
function solution(n) {
const answer = new Array(n).fill(new Array(n).fill(0))
// [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ]
for (let i = 0; i < n; i++) {
answer[i][i] = 1;
};
return answer;
// [[1, 1, 1], [1, 1, 1], [1, 1, 1]]
};
solution(3);
new Array(n).fill(new Array(n).fill(0)) 에서 .fill() 로 생성한 배열은 동일한 객체를 참조합니다.
따라서 한 내부 배열의 요소를 변경하면, 다른 내부 배열에도 같은 변경이 반영됩니다.
function solution(n) {
const answer = Array.from({length: n}, () => new Array(n).fill(0));
// [ [ 0, 0, 0 ], [ 0, 0, 0 ], [ 0, 0, 0 ] ]
for (let i = 0; i < n; i++) {
answer[i][i] = 1;
};
return answer;
// [[1, 0, 0], [0, 1, 0], [0, 0, 1]]
};
solution(3);
Array.from() 의 콜백 함수는 매번 새로운 내부 배열 객체를 생성하여 각 요소에 할당합니다.
따라서 각 내부 배열은 독립적인 객체로써 각자 다른 참조를 가지고 있습니다. 그래서 한 내부 배열의 요소를 변경하더라도 다른 내부 배열에는 영향을 주지 않습니다.
Array.from() 메서드가 new Array().fill() 메서드 보다 메모리 사용이 높은 것 같습니다.