알고리즘/인프런
[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
반응형