2022/01/03) 7. 奉宥利[1,2次元探索]


1.質問


『奉宥利』
:どの格子にもその地域の高さが書いてあります.各格子板の数字の中で、自分の上下左右の数字より大きいのがピークエリアです.いくつのピーク地域があるかを知るプログラムを作成します.
メッシュのエッジをゼロに初期化するとします.
上記のように、ピークは10個です

2.解決方法

  • 現在の位置を基準に上下左右を比較します.
    arr[i][j]を基準にarr[nx][ny](上下左右)を比較する.
  • arr[nx][ny]の値で、dxとdy配列を生成し、nx=i+dx[k]にします.
  • は、3つのforゲートと最大ピークを探すifゲートを生成する.
    (nx>=0&nx
  • を整理すると、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にjを加えるかを考えるだけで、iは横、jは縦を担当するので、iを加えるのが正解です!