2023년 04월 06일 목요일 - 왜 아직 목욜?


오늘 올려볼 문제는 1254번 Number of Closed Islands 이라는 문제이다.


사진을 클릭하면 해당 문제로 이동합니다.

leetcode 문제 사진

오늘도 LeetCode 사이트 오늘의 문제를 가지고 왔다.

이런 문제는 너무 쉽지


입력


사진에서도 볼 수 있듯이 2차원 int 배열 1개가 입력으로 들어온다.



풀이 및 코드


1로 둘러싸여 있는 0으로만 이루어져있는 섬의 개수를 구하는 문제이다.


오늘은 처음부터 정답을 생각해냈다.

0으로 이루어진 섬은 bfs로 구한다.

1로 둘러싸여 있어야 하므로 해당 섬이 맨끝에 하나라도 위치하면 세지 않는다.

한 번 탐색한 곳은 다시 탐색하지 않는다.


이제 코드를 봐보자!


풀이코드

class Solution {
    public int closedIsland(int[][] grid) {
        int c = grid.length, r = grid[0].length, result = 0;
        var dir = new int[][] {{0, 1}, {1, 0}, {0, -1}, {-1, 0}};
        var visit = new boolean[c][r];
        
        for(int i = 0; i < c; i++) {
            for(int j = 0; j < r; j++) {
                if(visit[i][j] || grid[i][j] == 1) continue;
                
                var isIsland = true;
                var q = new LinkedList<int[]>();
                q.add(new int[]{i, j});
                while(!q.isEmpty()) {
                    var now = q.poll();
                    if(now[0] < 0 || now[0] >= c || now[1] < 0 || now[1] >= r) continue;
                    if(visit[now[0]][now[1]] || grid[now[0]][now[1]] == 1) continue;
                    if(now[0] == 0 || now[0] == c - 1 || now[1] == 0 || now[1] == r - 1) isIsland = false;
                    
                    visit[now[0]][now[1]] = true;
                    
                    for(var d : dir) q.add(new int[]{now[0] + d[0], now[1] + d[1]});
                }
                
                if(isIsland) result++;
            }
        }
        
        return result;
    }
}




제출 화면

leetcode 문제 맞았습니다


빨리 주말이 왔으면 좋겠다!


내일도 문제를 풀어서 블로그에 글을 쓸 수 있으면 좋겠다.

+ Recent posts