Algorithm/문제

22. 봉우리

챛채 2023. 6. 27. 15:57

이중for문 사용 상,하,좌,우 비교했을 때 큰 값 없으면 count ++

 방향 배열 

int [] dx ={-1,0,1,0}

int [] dy ={0,1,0,-1}

nx = i+dx[k]

ny = i+dy[k]

 

경계선 처리는 어떻게 하는가?

1행1열(5)인 경우 가장자리까지 비교를 해버리면 ArrayIndexOutOfBoundsException 에러 발생

0번 인덱스까지 존재하는데 -1번 인덱스까지 본 경우

nx >= 0 && nx < n && ny >= 0 && ny < n 

if 문에 코드 추가 경계선 처리를 먼저 확인 한 후 봉우리 확인을 해야하기 때문에 앞쪽에다 추가해준다.

 

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Scanner;

public class Main {

    public int solution(int n, int[][] arr) {
        int[] dx = {-1, 0, 1, 0};
        int[] dy = {0, 1, 0, -1};
        int answer=0;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < n; j++) {
                boolean flag=true;
                //12시, 3시, 9시, 6시 탐색
                for (int k = 0; k < 4; k++) {
                    int nx = i + dx[k];
                    int ny = j + dy[k];
                    if (nx >= 0 && nx < n && ny >= 0 && ny < n && arr[nx][ny] >= arr[i][j]) {
                        flag = false; //봉우리가 아님
                        break;
                    }
                }
                //봉우리인지 아닌지 확인 count
                if(flag) answer++;
            }
        }
        return answer;
    }
   public static void main(String[] args){
       Main T = new Main();
       Scanner kb = new Scanner(System.in);
       int n=kb.nextInt();
       int[][] arr =new int [n][n];
       for (int i = 0; i < n; i++) {
           for (int j = 0; j < n; j++) {
               arr[i][j]=kb.nextInt();
           }
       }
       System.out.print(T.solution(n, arr));
   }
}