해결된 질문
작성
·
130
1
선생님 안녕하세요 문제를 푸는 과정에서 궁금한 점이 생겨서 질문 드립니다.
먼저 저는 문제에서 힌트를 얻어 기존의 배열의 테두리에 0을 추가해주고 풀었습니다.
근데 arr.push / arr.unshift를 통하여 배열 상하단에 [0,0,0,0,0]으로 된 배열을 추가하고 난 뒤
배열 안의 arr[i]의 배열에도 push, shift를 통해 0을 추가해줬습니다.
이 과정에서 동일하게 for문을 진행했는데
추가해준 첫번째, 마지막 배열의 길만 9개가 되는데 왜 그런지 이유를 잘 모르겠습니다.
다른 배열들은 push, unshift가 한번씩만 된 거 같은데, 추가해준 배열만 2번씩 된 거 같습니다. 이유가 무엇인지 알 수 있을까요??
제가 잘못한 부분이 있는걸까요??
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(arr){
let answer = 0;
let newArr = new Array(arr.length).fill(0);
arr.push(newArr);
arr.unshift(newArr);
for(let i=0;i<arr.length;i++){
arr[i].push(0);
arr[i].unshift(0);
}
for(let i=0;i<arr.length;i++){
for(let j=0;j<arr[i].length;j++){
let res = arr[i][j];
if(i !== 0 && i !== arr.length - 1 && j !== 0 && j !== arr[i].length - 1){
if(res > arr[i+1][j] && res > arr[i-1][j] && res > arr[i][j+1] && res > arr[i][j-1]){
answer += 1;
}
}
}
}
console.log(arr)
return answer;
}
let arr = [
[5,3,7,2,3],
[3,7,1,6,1],
[7,2,5,3,4],
[4,3,6,4,1],
[8,7,3,5,2]
]
console.log(solution(arr))
</script>
</body>
</html>
답변 1
1
안녕하세요^^
첫 번째 배열과 마지막 배열은 동일 배열입니다. arr[0][0] = 1로 값을 바꾸면 arr[6][0]도 1로 변해 있을 겁니다.
아래와 같이 하나는 깊은 복사를 해서 unshift를 하면 해결될 겁니다.
arr.push(newArr);
arr.unshift(newArr.slice());
이해 했습니다 선생님 !
제가 new Array로 만든 배열도 레퍼런스 타입이라는걸 생각 못한거 같습니다 ㅜ
감사합니다 !