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