봉우리 문제 - (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));
👉 위의 코드를 해석해보자
-
상, 하, 좌, 우를 비교하기 위해 인덱스에 더할 값들을 배열로 미리 만들었다.
-
봉우리라는 것을 증명해줄 값이다.
-
현재 인덱스에서 값을 더해주면서 상, 하, 좌, 우의 값을 가져오고, 비교할 수 있게 해준다.
-
인덱스가 0보다 작으면 오류가 나오기 때문에 오류가 뜨기 전에 처리해준 모습이다. 인덱스가 0보다 작으면 제일 작은 값으로 처리하기 때문에 이 값들은 무시해도 된다.
-
처리 후 flag값이 변하지 않고 그대로라면 봉우리라는 뜻이므로 answer에 1을 더해준다.
👉 이를 통해 봉우리의 갯수를 구할 수 있다.
처음엔 if문을 통해 모든 경우의 수를 비교하려고 했고, 배열[-1]의 오류처리를 하지 못했다.
하지만 for문을 한번 더 사용하여 상,하,좌,우를 모두 비교하고, 그 for문을 돌리기 전에 오류처리를 하여 오류를 접하지 않을 수 있었다.
출처 - 자바스크립트 알고리즘 문제풀이
Author And Source
이 문제에 관하여(봉우리 문제 - (2차원 배열 상,하,좌,우 값 비교)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@rkrkdldkd/봉우리-문제2차원-배열-상하좌우-값-비교저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)