Algorithm/baekjoon

안전영역

마닐라 2022. 1. 21. 14:41

📍 문제 설명

 

💡 접근

다 잠기지 않는 경우부터 다 잠기는 경우까지 해당 높이에 따라 안전 영역 계산해주면 되는 문제였다.

 

👩‍💻 코드

import java.util.*;

public class Main {
    static int n, m, h, k, answer,cnt, max;
    static int[][] board, dis, clone;
    static boolean[][] visited;
    static int[] ch,pm, combi;
    static boolean flag = true;
    static int[] dx = {-1,1,0,0};
    static int[] dy = {0,0,-1,1};
    public static void main(String[] args) {
        Main T = new Main();
        Scanner kb = new Scanner(System.in);

        n = kb.nextInt(); //지역 정보
        int h = 0;
        board = new int[n][n];
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++) {
                board[i][j] = kb.nextInt();
                if(board[i][j] > h) h = board[i][j];
            }
        }


        //높이가 1인 지점이 물에 잠겼을 때 ~ 최댓값인 지점이 물에 잠겼을 때의 안전영역갯수를 구한다.
        //높이가 0이라 다 안잠기는 경우 - 안전영역은 1
        //높이가 최댓값이라 다 잠기는 경우 - 안전영역은 0
        for(int i = 0; i <= h; i++) {
            visited = new boolean[n][n];
            answer = 0;
            T.solution(0,0, i);
            max = Math.max(answer, max);
        }
        System.out.println(max);
    }


    static void solution(int x, int y, int maxh) {
        //maxh보다 높은 지점을 만나면 안전영역의 갯수를 추가해주고 해당 영역은 true으로 바꾸자.
        for(int i = x; i < n; i++) {
            for(int j = y; j < n; j++) {
                //방문하지 않았고 비의 높이보다 커야 잠기지 않음
                if(!visited[i][j] && board[i][j] > maxh) {
                    answer++;
                    visited[i][j] = true;
                    //상하좌우 확인해서 모두 방문처리
                    DFS(i, j, maxh);
                }
            }
        }
    }

    private static void DFS(int x, int y, int maxh) {
        for(int i = 0; i < 4; i++) {
            int nx = x + dx[i];
            int ny = y + dy[i];
            if(nx>=0 && ny>=0 && nx<n && ny<n && board[nx][ny] > maxh && !visited[nx][ny]) {
                visited[nx][ny] = true;
                DFS(nx, ny, maxh);
            }
        }
    }
}

'Algorithm > baekjoon' 카테고리의 다른 글

숨바꼭질2  (0) 2022.01.22
구슬 탈출  (0) 2022.01.22
늑대와 양  (0) 2022.01.21
사다리 조작  (0) 2022.01.21
스타트링크  (0) 2022.01.19