알고리즘/인프런

[JS] - 봉우리의 개수는 몇개인가?

미니미니찍찍 2022. 3. 16. 01:10

N*N 격자판에 그 지역의 높이가 쓰여있다.
각 격자판의 숫자 중 자신의 상하좌우보다 큰 숫자를 봉우리지역이라 한다.
봉우리 지역이 몇개인가?

 

와후...... 이건 뭐 보자마자 

아.....

무슨 말인지 1도 모르겠다!!!!!! 

 

일단 주어진 봉우리를 살펴보자 

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],
];

 

방금 앞에서 했던 격자판과는 달랐다.

이것은 그냥 상하좌우를 다 비교하면서 만약에 자기보다 큰게 하나라도 존재하지않는 것을 찾아야하는 문제이다.

 

그냥 어렵다

바로 문제풀이가자 

 

상하좌우의 index를 구해야할때 

기준이 0,0 이라면 ? 

  -1, 0  
0 ,-1 0 , 0 0 , 1
  1 , 0  

 

function solution(arr){
	let answer = 0;
    let n = arr.length ; // 4
    
    let dx = [-1, 0 , 1 , 0];
    let dy = [0 , 1, 0 , -1];
    
    let dxlen = dx.length;
    for(let i = 0 ; i < n ; i ++){
    	for(let j = 0 ; j < n ; j ++){
        	// 봉우리인지 아닌지 판별하는 변수 선언 
        	let flag = true; 
        	// 상하좌우 
            for (let k = 0 ; k < dxlen ; k++ ){
            let idx = i + dx[k]; 
            let idy = j + dy[k];
            // i = 0 , idx = -1 / 0 / 1 
            // i = 1 , idx = 0 / 1 / 2
            // i = 2 , idx = 1 / 2 / 3
            // i = 3 , idx = 2 / 3 / 4
            // n = 4 

            // 뒤에 조건에 아무것도 맞지않으면 봉우리이다 
            if(idx >= 0 && idy >= 0 && idx < n && idy < n && arr[i][j] < arr[idx][idy])
            {
                flag = false;
            }
        }
        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));

 

 

출처 - 인프런 자바스크립트 알고리즘 김태원님 강의 

728x90
반응형