※ 문제
지도 정보가 N*N 격자판에 주어집니다. 각 격자에는 그 지역의 높이가 쓰여있습니다. 각 격자판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다. 봉우리 지역이 몇 개 있는 지 알아내는 프로그램을 작성하세요. 격자의 가장자리는 0으로 초기화 되었다고 가정한다. 만약 N=5 이고, 격자판의 숫자가 다음과 같다면 봉우리의 개수는 10개입니다.
▣ 입력설명
첫 줄에 자연수 N이 주어진다.(1<=N<=50)
두 번째 줄부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어진다. 각 자연수는 100을 넘지 않는다.
▣ 출력설명
봉우리의 개수를 출력하세요.
▣ 입력예제 1
5
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
▣ 출력예제 1
10
※ 코드
<html>
<head>
<meta charset="UTF-8">
<title>출력결과</title>
</head>
<body>
<script>
function solution(arr) {
let answer = 0;
let n = arr.length;
let dy = [-1, 0, 1, 0];
let dx = [0, 1, 0, -1];
for (let i = 0; i < n; i++) {
for (let j = 0; j < n; j++) {
let flag = 1;
for (let k = 0; k < 4; k++) {
let ny = i + dy[k];
let nx = j + dx[k];
if (nx >= 0 && nx < n && ny >= 0 && ny < n && arr[ny][nx] >= arr[i][j]) {
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));
</script>
</body>
</html>
※ 설명
2차원 배열을 탐색하기 위해 2중 for문을 사용하고 각각 위치에서의 탐색할 배열의 크기만큼 for문을 돌린다.
상하좌우를 탐색해야 하므로 dx, dy변수에 각 탐색할 위치의 배열을 할당 해 놓고 2중 for문을 돌려 2차원 배열을 탐색하기 위한 준비를 한다.
이후 정의한 dx, dy 배열의 크기만큼 for문을 돌려서 각 위치에 해당하는 index값을 ny, nx에 할당한다.
만약 nx, ny가 2차원배열 밖을 탐색할 수 있으므로 nx, ny는 0보다 커야하고 2차원배열의 크기보단 작도록 설정하고 이후 nx,ny의 index를 갖는 배열의 값이 i,j인덱스를 갖는 배열의 값보다 크거나 같을 경우 봉우리가 아니므로 flag에 0을 할당하고 for문을 바로 빠져나오기 위해 break문을 작성한다.
for문에 나왔을 flag값이 1이면 봉우리 이므로 answer의 값에 1을 더해나간다.
※ 핵심
특정값의 주변을 탐색하기 위해선 탐색할 위치에 대한 배열을 먼저 할당해놓아야 한다.
해당 내용은 김태원님의 자바스크립트 알고리즘 문제풀이 강의를 듣고 작성한 글입니다.
'🤯 코딩테스트 > Javscript' 카테고리의 다른 글
[자바스크립트 알고리즘 문제풀이(코딩테스트 대비)] Section 03 - 회문 문자열 (0) | 2022.01.10 |
---|---|
[자바스크립트 알고리즘 문제풀이(코딩테스트 대비)] Section 02 - 격자판 최대합 (0) | 2022.01.10 |
[자바스크립트 알고리즘 문제풀이(코딩테스트 대비)] Section 02 - 등수구하기 (0) | 2022.01.10 |
[자바스크립트 알고리즘 문제풀이(코딩테스트 대비)] Section 02 - 점수계산 (0) | 2022.01.10 |
[자바스크립트 알고리즘 문제풀이(코딩테스트 대비)] Section 02 - 가위 바위 보 (0) | 2022.01.10 |