문제
n*n격자판에서 자신의 상하좌우 숫자보다 큰 숫자가 몇개 있는지 출력하세요!
(격자의 가장자리는 0으로 초기화)
풀이
function solution(arr) {
let answer = 0;
let n = arr.length;
let dx = [-1, 0, 1, 0];
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번만큼 돌며 사방탐색
let nx = i + dx[k]; //사방탐색 행의 위치
let ny = j + dy[k]; //사방탐색 열의 위치
if (
nx >= 0 &&
ny >= 0 && //탐색 대상이 0 이상
nx < n &&
ny < n && //탐색 대상이 배열의 범위 내
arr[i][j] < arr[nx][ny]
//자신보다 하나라도 큰 것이 있다면 탐색종료
) {
flag = 0;
break;
}
}
if (flag) answer++; //k탐색을 마쳤는데 flag가 그대로라면 작은 것이 없다는 것 = 자신이 봉우리라는 뜻.
}
}
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));
'Algorithm & 자료구조 > (인프런) 자바스크립트 알고리즘 문제풀이' 카테고리의 다른 글
[알고리즘]가장 짧은 문자 거리 (0) | 2022.02.01 |
---|---|
[알고리즘]숫자만 추출하기 (0) | 2022.01.31 |
[알고리즘]격자판 최대 합 구하기 (0) | 2022.01.30 |
[알고리즘] 배열 등수 구하기 (Array.from) (0) | 2022.01.29 |
[알고리즘]중복 단어 제거 - 배열의 중복 제거 (filter, indexOf) (0) | 2022.01.27 |