https://leetcode.com/problems/surrounded-regions/description/

코드설명

넓이우선탐색(BFS) + 구현(Implementation) 을 활용합니다.

 

문제에 주어진대로, "O"를 돌면서 인접한 곳에 "O"을 BFS로 탐색합니다.

이떄, 탐색 중에 가장 바깥(r == 0 || r == Board.length - 1 || c == 0 || c == Board[0].length) 에 도달한다면, 해당 칸은 SurroundedRegion이 아닙니다.

 

만약 SurroundedRegion이라면(즉, 바깥과 연결되어있지 않고 X로 둘러쌓여있다면), 해당 칸을 모두 "X"로 표시합니다.

코드

class Solution {
    boolean[][] visited;
    public void solve(char[][] board) {
        visited = new boolean[board.length][board[0].length];
        for(int i=0; i<board.length; i++){
            for(int j=0; j<board[0].length; j++){
                char temp = board[i][j];
                if(temp == 'O' && visited[i][j] == false){
                    BFS(i, j, board);
                }
            }
        }
    }

    void BFS(int sR, int sC, char[][] board){
        Stack<Node> st = new Stack<>();
        Queue<Node> q = new LinkedList<>();
        Node nowNode = new Node(sR, sC);
        q.offer(nowNode);
        st.push(nowNode);
        visited[sR][sC] = true;
        boolean isSurrounded = true;
        while(!q.isEmpty()){
            Node temp = q.poll();
            int r = temp.r;
            int c = temp.c;
            for(int[] dir : new int[][] {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}){
                int nr = r + dir[0];
                int nc = c + dir[1];

                if(nr < 0 || nr >= board.length || nc < 0 || nc >= board[0].length ) {
                    isSurrounded = false;
                    continue;
                }
                if(visited[nr][nc] == true) continue;
                if(board[nr][nc] == 'X') continue; 
                visited[nr][nc] = true;
                Node newNode = new Node(nr, nc);
                q.offer(newNode);
                st.push(newNode);
            }
        }

        if(isSurrounded == true){
            while(!st.isEmpty()){
                Node temp = st.pop();
                board[temp.r][temp.c] = 'X';
            }
        }

    }
}
class Node{
    int r;
    int c;
    public Node(int r, int c){
        this.r = r;
        this.c = c;
    }
}

 

+ Recent posts