2022/01/03) 7. 봉우리 [1,2차원 탐색]
1. 문제
<봉우리>
: 각 격자에는 그 지역의 높이가 쓰여있다. 각 격자판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역이다. 봉우리 지역이 몇 개 있는 지 알아내는 프로그램을 작성한다.
격자의 가장자리는 0으로 초기화 되었다고 가정한다.
위와 같은 값이 주어진다면, 봉우리는 10개다.
2. 해결 방법
- 현재의 위치를 기준으로, 상하좌우를 비교해야 하는 게 핵심이다.
arr[i][j]를 기준으로, arr[nx][ny](상하좌우)를 비교하여 보자.- arr[nx][ny]의 값들을, 주는 방법은 dx와 dy배열을 생성 후, nx = i+dx[k]하면 된다.
- 그리하여 3개의 for문과 가장 큰 봉우리를 찾는 if문을 생성한다.
(nx>=0 && nx<n은 격자판의 가에 위치한 것들 때문에 주는 조건이다.)- 정리하자면, 4방향 다 비교해보고 큰 게 없으면, 곧 제일 크면 카운트 해주는 것이다.
3. 정답
<script> function solution(arr){ //상하좌우비교하여 제일 큰 숫자만 출력. => 4방향 다 비교해보고 큰 게 없으면 카운팅을 한다. let answer = 0; let n = arr.length; let dx = [0,1,0,-1]; let dy = [-1,0,1,0]; for(let i = 0; i < n; i++){ for(let j = 0; j < n; j++){ let flag = 1; for(let k=0; k<4; k++){ //dx dy를 돌릴 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] ){ 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>
4. 내 코드와 비교 그리고 반성
이번에 내가 정말 좋아하는 모누가 며칠 동안 놀러 왔었다. 그 핑계로 공부를.... ㅜ 죄송합니다... 그리고 이번 문제가 2차원 문제라곤 생각하지 못했었다. 아직 2차원을 완전히 이해하진 못했나보다. 이번엔 좀 어려웠다. x y 방향은 헷갈리지 않는다. 다만 가에 있는 것들때문에 주는 조건이 아직 이해가 잘.. 다음 날에 한 번 더 해보니까 이해 완료.다만 nx에 i를 더해줄 지, j를 더해줄 지에 대한 고민을 하였는데, i는 가로를 담당하고 j는 세로를 담당하므로, i를 더해주는 게 정답이었따!
Author And Source
이 문제에 관하여(2022/01/03) 7. 봉우리 [1,2차원 탐색]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@7lo9ve3/20220103-6.-격자판-최대합-12차원-탐색저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)