[Algorithm] 봉우리 (javaScript)

swing·2023년 6월 24일
0

[Algorithm]

목록 보기
47/96

문제

지도 정보가 N*N 격자판에 주어집니다. 각 격자에는 그 지역의 높이가 쓰여있습니다. 각 격자 판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다. 봉우리 지역이 몇 개 있는 지 알아내는 프로그램을 작성하세요.
격자의 가장자리는 0으로 초기화 되었다고 가정한다.
만약 N=5 이고, 격자판의 숫자가 다음과 같다면 봉우리의 개수는 10개입니다.

0000000
0537230
0371610
0725340
0436410
0873520
0000000

입력설명

첫 줄에 자연수 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
profile
if(기록📝) 성장🌱

0개의 댓글