[알고리즘] 봉우리 개수 구하기 (JavaScript)

nemo·2022년 5월 2일
0

문제

지도 정보가 (N*N) 격자판에 주어집니다. 각 격자에는 그 지역의 높이가 쓰여있습니다. 각 격자 판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다. 봉우리 지역이 몇 개 있는 지 알아내는 프로그램을 작성하세요.

격자의 가장자리는 0으로 초기화 되었다고 가정한다.

입력 예제

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




풀이

기준점에서 상, 하, 좌, 우를 확인하고 기준보다 높은 값이 있다면 봉우리에서 탈락!

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

  for (let i = 0; i < n; i++) {
    for (let j = 0; j < n; j++) {
      // 상하좌우 확인
      let flag = 1;
      for(let k = 0; k < x.length; k++) {
        let nx = i + x[k];
        let ny = j + y[k];
        
        // 상하좌우의 좌표가 격자판을 벗어나면 안되므로
        // nx, ny는 0~n 범위 내로 설정
        if (nx >= 0 
            && nx < n 
            && ny >= 0
            && ny < n 
            && arr[nx][ny] >= arr[i][j]) {
          // 상하좌우 중에 기준값보다 큰 값이 있다면,
          // flag를 0으로 바꾸고 반복문 종료
          flag = 0;
          break;
        }
      }
      // 상하좌우 중에 큰 값이 없었다면 flag는 여전히 1
      // 봉우리 개수++
      if(flag) answer++;
    }
  }

  return answer;
}

0개의 댓글