인프런 커뮤니티 질문&답변

ReKoding님의 프로필 이미지
ReKoding

작성한 질문수

자바스크립트 알고리즘 문제풀이 입문(코딩테스트 대비)

섹션 2, 1,2차원 탐색(봉우리)

해결된 질문

작성

·

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());

 

ReKoding님의 프로필 이미지
ReKoding
질문자

이해 했습니다 선생님 !

제가 new Array로 만든 배열도 레퍼런스 타입이라는걸 생각 못한거 같습니다 ㅜ

감사합니다 !

ReKoding님의 프로필 이미지
ReKoding

작성한 질문수

질문하기