본문 바로가기

코딩 문제/백준

백준 - 2468번

728x90

 

풀이

 

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.Arrays;

 

public class Main {

 

      static int[][] arr;

      static boolean[][] check;

      static int num = 0;

      static int[] changeX = {1, -1, 0, 0};

      static int[] changeY = {0, 0, 1, -1};

      public static void main(String[] args) throws IOException {

 

            BufferedReader br = new BufferedReader ( new InputStreamReader (System.in));

 

            num = Integer.parseInt(br.readLine());

            int max = 0;

            arr = new int[num][num]; // 입력받는 영역 배열 초기화

            String[] strArr = new String[num];

            // 입력받기

            for(int i=0; i<num; i++) {

                  strArr = br.readLine().split(" ");

                  for(int j=0; j<num; j++) {

                        int changeNum = Integer.parseInt(strArr[j]);

                        arr[i][j] = changeNum;

                        if(changeNum > max) {

                              max = changeNum;

                        }

                  }

            }

            int[] maxArr = new int[max];

            // 안전지역 개수 카운팅

            for(int i=0; i<max; i++) {

                  int count = 0;

                  check = new boolean[num][num]; // 방문 배열 초기화

                  for(int j=0; j<num; j++) {

                        for(int k=0; k<num; k++) {

                              if(arr[j][k] > i && check[j][k] != true) {

                                    Count(j, k, i);

                                    count++;

                              }

                        }

                  }

                  maxArr[i] = count;

            }

            Arrays.sort(maxArr);

            System.out.println(maxArr[max-1]);

      }

 

      private static void Count(int a, int b, int depth) { // a : x좌표, b : y좌표, depth : 깊이

            check[a][b] = true; // 방문 확인

            for(int i=0; i<4; i++) {

                  int chX = a + changeX[i];

                  int chY = b + changeY[i];

 

                  if(chX < num && chY < num && chX >= 0 && chY >= 0) {

                        if(check[chX][chY] != true && arr[chX][chY] > depth) {

                              Count(chX, chY, depth);

                        }

                  }

            }

      }

}

'코딩 문제 > 백준' 카테고리의 다른 글

백준 - 1987번  (0) 2021.03.25
백준 - 10026번  (0) 2021.03.25
백준 - 2667번  (0) 2021.03.25
백준 - 1325번  (0) 2021.03.17
백준 - 1303번  (0) 2021.03.16