봉우리 문제 - (2차원 배열 상,하,좌,우 값 비교)


2차원 배열 상, 하, 좌, 우 값 비교




👉 위의 문제는 현재 위치의 숫자와 상, 하, 좌, 우의 숫자를 비교하여 현재 위치의 숫자가 제일 클 경우 봉우리가 된다.

주어진 배열은 0으로 감싸져 있다는 사실도 참고하도록 하자.

이를 코드로 옮겨보자.



코드


function solution(arr) {
    let answer = 0;
    let dx = [0, 1, 0, -1];   ... 1
    let dy = [1, 0, -1, 0];   
    let n = arr.length;

    for (let i = 0; i < n; i++) {
        for (let j = 0; j < n; j++) {
            let flag = 1;   ... 2
            for (let k = 0; k < 4; k++) {
                let nx = i + dx[k];   ... 3
                let ny = j + dy[k];

                if (   ... 4
                    nx >= 0 &&
                    nx < n &&
                    ny >= 0 &&
                    ny < n &&
                    arr[nx][ny] >= arr[i][j]
                ) {
                    flag = 0;
                    break;
                }
            }

            if (flag) answer++;   ... 5
        }
    }

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

👉 위의 코드를 해석해보자
  1. 상, 하, 좌, 우를 비교하기 위해 인덱스에 더할 값들을 배열로 미리 만들었다.

  2. 봉우리라는 것을 증명해줄 값이다.

  3. 현재 인덱스에서 값을 더해주면서 상, 하, 좌, 우의 값을 가져오고, 비교할 수 있게 해준다.

  4. 인덱스가 0보다 작으면 오류가 나오기 때문에 오류가 뜨기 전에 처리해준 모습이다. 인덱스가 0보다 작으면 제일 작은 값으로 처리하기 때문에 이 값들은 무시해도 된다.

  5. 처리 후 flag값이 변하지 않고 그대로라면 봉우리라는 뜻이므로 answer에 1을 더해준다.


👉 이를 통해 봉우리의 갯수를 구할 수 있다.

처음엔 if문을 통해 모든 경우의 수를 비교하려고 했고, 배열[-1]의 오류처리를 하지 못했다.
하지만 for문을 한번 더 사용하여 상,하,좌,우를 모두 비교하고, 그 for문을 돌리기 전에 오류처리를 하여 오류를 접하지 않을 수 있었다.

출처 - 자바스크립트 알고리즘 문제풀이

좋은 웹페이지 즐겨찾기