본문으로 바로가기
728x90
반응형

▷ 문제

지도 정보가 N*N 격자판에 주어집니다. 각 격자에는 그 지역의 높이가 쓰여있습니다.

각 격자판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다.

봉우리 지역이 몇 개 있는 지 알아내는 프로그램을 작성하세요.

격자의 가장자리는 0으로 초기화 되었다고 가정합니다.

만약 N=5 이고, 격자판의 숫자가 다음과 같다면 봉우리의 개수는 10개입니다.

* 입력

첫 줄에 자연수 N이 주어집니다.(2<=N<=50)

두 번째 줄부터 N줄에 걸쳐 각 줄에 N개의 자연수가 주어집니다.

각 자연수는 100을 넘지 않습니다.

* 출력

봉우리의 개수를 출력하세요.

▷ 입력 예시

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

19 13 30 13 19

▷ 출력 예시

10

▷ 풀이

import java.util.Scanner;
import java.util.Arrays;

public class Main {
    public int solution(int n, int[][] arr){
      int answer = 0; // 봉우리의 개수

      for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
          //가장자리 제외
          if(i == 0 || j == 0 || i == n-1 || j == n-1){
            continue;
          } else{
            //상하좌우와 비교
            if(arr[i][j] > arr[i-1][j] && arr[i][j] > arr[i+1][j] 
                && arr[i][j] > arr[i][j-1] && arr[i][j] > arr[i][j+1]){
              answer++;
            }
          }
        }
      }
      
      return answer;
    }

    public static void main(String[] args) {
        Main main = new Main();
        Scanner kb = new Scanner(System.in);
        int n = kb.nextInt() + 2; // 가장자리를 만들어주기 위해 2를 더해줍니다.
        int[][] arr = new int[n][n];
        for (int i = 0; i < n; i++) {
          for (int j = 0; j < n; j++) {
            if(i != 0 && j != 0 && i != n-1 && j != n-1){ // 가장자리를 제외하고 입력 값으로 초기화합니다.
              arr[i][j] = kb.nextInt();
            }
          }          
        }
        // System.out.println(Arrays.deepToString(arr)); // 2차원 배열 출력
        kb.close();        

        System.out.println(main.solution(n, arr));
    }
}

▷ 핵심 포인트

1. 변수 n을 입력받을 때 가장자리까지 포함하여 만들면 편하므로 2를 더해줍니다.

반응형