Surrounded Regions

Updated:

BFS문제인데, 조건을 break문을 넣어가지고, 제대로 탐색이 안됐었다.

O인 지점에서 BFS를 진행하되, X로 바꿔야 하는 조건은 O인 것만 탐색을 하되 경계선까지 가지 않았을때만 X로 바꿔야 하는 문제이다

by Java


class Solution {
    int[] gox = {0,1,-1,0};
    int[] goy = {1,0,0,-1};
    public void solve(char[][] board) {
        if(board.length==0) return;
        boolean[][] visited = new boolean[board.length][board[0].length];
        for(int i=0;i<board.length;i++) {
            for(int j=0;j<board[i].length;j++) {
                if(!visited[i][j] && board[i][j]=='O') {
                    List<P> list =new ArrayList<>();
                    boolean ret =bfs(i,j,board,list,board.length,board[0].length,visited);
                    if(ret) {
                        for(P ele : list) {
                            board[ele.x][ele.y]='X';
                        }
                    }
                }
            }
        }
    }
    private boolean bfs(int sx,int sy,char[][] board, List<P> list,int n,int m,boolean[][] visited) {
        Deque<P> q= new ArrayDeque<>();
        q.add(new P(sx,sy));
        visited[sx][sy]=true;
        list.add(new P(sx,sy));
        boolean check = false;
        while(!q.isEmpty()) {
            int x = q.peek().x;
            int y = q.peek().y;
            if(x==0 || x==n-1 || y==0 || y==m-1) {
                check = true;
				// break;
            }
            q.poll();
            for(int i=0;i<4;i++) {
                int nx = x+gox[i], ny=y+goy[i];
                if(nx<0 || nx>=n || ny<0 || ny>=m || visited[nx][ny] || board[nx][ny]=='X') continue;
                list.add(new P(nx,ny));
                q.add(new P(nx,ny));
                visited[nx][ny]=true;
            }
        }
        if(check) return false;
        return true;
    }
}
class P {
    int x,y;
    P(int x,int y) {
        this.x = x;
        this.y = y;
    }
}

Leave a comment