[JAVA] 21. 봉우리

2021. 5. 1. 19:26
728x90

설명

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

각 격자판의 숫자 중 자신의 상하좌우 숫자보다 큰 숫자는 봉우리 지역입니다. 봉우리 지역이 몇 개 있는 지 알아내는 프로그램을 작성하세요.

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

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

예시 입력  

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

 

예시 출력 

10

 

 

풀이

 

import java.util.*;

public class Main  {

    public static void main(String[] args) {

        Scanner in=new Scanner(System.in);
        int size = in.nextInt();
        int[][] arr = new int[size+2][size+2];
        int answer = 0;

        for(int i=1; i<size+1; i++){
            for(int j=1; j<size+1; j++) {
                arr[i][j] = in.nextInt();
            }
        }


        for(int i=1; i<size+1; i++){
            for(int j=1; j<size+1; j++){
                if(arr[i][j]> arr[i-1][j] && arr[i][j]> arr[i][j-1] && arr[i][j]> arr[i+1][j] && arr[i][j]> arr[i][j+1]){
                    answer++;
                }
            }
        }
        System.out.println(answer);

    }
}

 

 

다른 풀이

 

import java.util.*;

public class Main  {

    public static void main(String[] args) {

        Scanner in=new Scanner(System.in);
        int size = in.nextInt();
        int[][] arr = new int[size][size];
        int answer = 0;

        for(int i=0; i<size; i++){
            for(int j=0; j<size; j++){
                arr[i][j] = in.nextInt();
            }
        }

		// 네방향 설정
        int[] dx = {-1,0,1,0};
        int[] dy = {0,1,0,-1};
        
        for(int i=0; i<size; i++){
            for(int j=0; j<size; j++){
                boolean flag = true;
                for(int k=0; k<4; k++){
                    int nx = i+dx[k];
                    int ny = j+dy[k];
                    // 네방향 값들과 비교하고 더 큰값이 있으면 false
                    if(nx>=0 && nx<size && ny>= 0 && ny<size && arr[nx][ny] > arr[i][j]){
                        flag=false;
                        break;
                    }
                }
                if(flag) answer++;
            }
        }
        System.out.println(answer);

    }
}
728x90

'알고리즘 > JAVA' 카테고리의 다른 글

[JAVA] 23. 공통원소 구하기  (0) 2021.05.05
[JAVA] 22. 두 배열 합치기 (two pointers)  (0) 2021.05.05
[JAVA] 20. 격자판 최대합  (0) 2021.04.28
[JAVA] 19. 등수구하기  (0) 2021.04.27
[JAVA] 18. 점수계산  (0) 2021.04.20

BELATED ARTICLES

more