지도 정보가 N*N 격자판에 주어집니다. 각 격자에는 그 지역의 높이가 쓰여있습니다. 각 격자 판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다. 봉우리 지역이 몇 개 있는 지 알아내는 프로그램을 작성하세요.
격자의 가장자리는 0으로 초기화 되었다고 가정한다.
만약 N=5 이고, 격자판의 숫자가 다음과 같다면 봉우리의 개수는 10개입니다.
0 | 0 | 0 | 0 | 0 | 0 | 0 |
---|---|---|---|---|---|---|
0 | 5 | 3 | 7 | 2 | 3 | 0 |
0 | 3 | 7 | 1 | 6 | 1 | 0 |
0 | 7 | 2 | 5 | 3 | 4 | 0 |
0 | 4 | 3 | 6 | 4 | 1 | 0 |
0 | 8 | 7 | 3 | 5 | 2 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 |
첫 줄에 자연수 N이 주어진다.(1<=N<=50)
두 번째 줄부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어진다. 각 자연수는 100을 넘지 않는다.
봉우리의 개수를 출력하세요.
입력
5
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
출력
10
격자 구조의 x,y좌표에 해당하는 배열을 선언한다.
2차원배열을 탐색하면서, 격자 구조 배열만큼 순회하며 봉우리가 맞는지 체크한다.
const solution = (input) => {
const [N, ...temp] = input.split("\n");
const arr = temp.map((v) => v.split(" ").map(Number));
const dx = [-1, 0, 1, 0];
const dy = [0, 1, 0, -1];
let answer = 0;
for (let i = 0; i < N; i++) {
for (let j = 0; j < N; j++) {
let flag = true;
for (let k = 0; k <= 3; k++) {
const [nx, ny] = [i + dx[k], j + dy[k]];
if (
nx >= 0 &&
nx < N &&
ny >= 0 &&
ny < N &&
arr[nx][ny] >= arr[i][j]
) {
flag = false;
break;
}
}
if (flag) answer++;
}
}
return answer;
};
const a = solution("5\n5 3 7 2 3\n3 7 1 6 1\n7 2 5 3 4\n4 3 6 4 1\n8 7 3 5 2");
console.log(a); // 10