https://school.programmers.co.kr/learn/courses/30/lessons/181833
프로그래머스
SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프
programmers.co.kr
문제 설명
정수 n이 매개변수로 주어질 때, 다음과 같은 n × n 크기의 이차원 배열 arr를 return 하는 solution 함수를 작성해 주세요.
- arr[i][j] (0 ≤ i, j < n)의 값은 i = j라면 1, 아니라면 0입니다.
- 1 ≤ n ≤ 100
3 | [[1, 0, 0], [0, 1, 0], [0, 0, 1]] |
6 | [[1, 0, 0, 0, 0, 0], [0, 1, 0, 0, 0, 0], [0, 0, 1, 0, 0, 0], [0, 0, 0, 1, 0, 0], [0, 0, 0, 0, 1, 0], [0, 0, 0, 0, 0, 1]] |
1 | [[1]] |
[오답 풀이]
function solution(n) {
let newArray = Array(n).fill(Array(n).fill(0))
for (let i = 0; i < n ; i ++){
newArray[i][i] = 1;
}
return newArray;
}
실행 결과
[[1,1,1],[1,1,1],[1,1,1]]
let newArray = Array(n).fill(something) 했을때 fill 메서드를 수행하는 something에 대해 얕은 복사를 해서 각 요소가 채워지기 때문에
=> something 의 요소를 수정하면 모든 newArray의 요소가 함께 수정되는 문제가 발생한다.
[최종 풀이]
function solution(n) {
let newArray = Array(n).fill().map(v=> Array(n).fill(0));
for (let i = 0; i < n ; i ++){
newArray[i][i] = 1;
}
return newArray;
}
newArray 배열의 요소 각각을 순회하면서 새로운 Array 를 생성해주면 개별 메모리를 차지하게 된다.
지피티가 추천한 코드는 Array.from을 사용하는 것이다.
근데 개인적으로 이 문법이 익숙하지가 않다 ㅜ
첫번째 인자로 length 속성을 갖는 객체, 두번째 인자로 각 요소에 수행할 콜백함수 전달하기
let newArray = Array.from({ length: n }, () => Array(n).fill(0));
'개발 공부 일지 > JavaScript' 카테고리의 다른 글
[프로그래머스] 2차원 배열 (0) | 2025.03.12 |
---|---|
[프로그래머스] 그림 확대 (0) | 2025.03.10 |
[프로그래머스] 기초 - 전국 대회 선발 고사 (0) | 2025.03.07 |
[프로그래머스] 기초 - 배열의 길이를 2의 거듭제곱으로 만들기 (0) | 2025.03.05 |
이벤트 핸들러를 할당하는 시점 (1) | 2025.02.07 |