[JS알고리즘] 봉우리



지도 정보가 N*N 격자판에 주어집니다. 각 격자에는 그 지역의 높이가 쓰여있습니다. 각 격자

판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다. 봉우리 지역이 몇 개

있는 지 알아내는 프로그램을 작성하세요.

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

만약 N=5 이고, 격자판의 숫자가 다음과 같다면 봉우리의 개수는 10개입니다.


function solution(arr){  
  let answer=0;
  let n=arr.length;
  let dx=[-1, 0, 1, 0];	//기준점을 기준으로 12시방향, 3시방향, 6시방향 9방향의 행,열의 인덱스를 구하기 위한 윛
  let dy=[0, 1, 0, -1];
  for(let i=0; i<n; i++){
    for(let j=0; j<n; j++){
      let flag=1;	//봉우리인지 아닌지 체크하는 flag
      for(let k=0; k<4; k++){	//4방면을 확인하는 for
        let nx=i+dx[k];	//가려고 하는 방향. 행 좌표
        let ny=j+dy[k];	//가려고하는 열 좌표
        if(nx>=0 && nx<n && ny>=0 && ny<n && arr[nx][ny]>=arr[i][j]){
          //arr[nx][ny]<=가려고하는 좌표 / arr[i][j]<= 내 좌표
          //nx>=0 && nx<n && ny>=0 && ny<n 는 내 위 옆 아래 옆이 존재하지 않는 경우도 있으니 그 경우는 제외하는 조건이다
          flag=0;
          break;
        }
      }
      if(flag) answer++;
    }
  }  

  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. 먼저 내 좌표를 기준으로 위 옆 아래 옆의 좌표를 어떻게 구할것인지 파악한다 dx=[-1, 0, 1, 0]; 로 구할 수 있음
  2. i, j를 이용하여 기준이 될 행, 열의 좌표를 구한다.
  3. 그 좌표를 기준으로 4방을 구할 k for문을 돌면서 내 좌표의 값보다 4방의 좌표의 값이 작은지(=그래야 봉우리가 되니까) 확인한다
  4. 4방중에 하나라도 존재하지 않을 경우를 확인하여 && 조건으로 같이 넣어준다




inflearn 자바스크립트 알고리즘 강의 내용 =)




© 2018. by sora

Powered by sora