ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [백준]2636. 치즈 (Java)
    알고리즘/백준 2021. 8. 30. 21:44

    💡 문제 분석

    /**
     * 1. 1. 치즈로 둘러싸인 공기는 제외하고, 외부 공기에 접촉되면 안되므로, 판의 가장자리에서 bfs를 한다
     * 2. bfs를 돌면서 치즈를 만나면, 지워야 할 치즈이므로 표시를 해둔다
     * 3. 치즈를 다 지울 때까지 반복
     */

    ⌨️ 코드

    JAVA

    import java.util.LinkedList;
    import java.util.Queue;
    import java.util.Scanner;
    
    public class Q2636 {
        static int Y, X, piece = 0, ret = 0;
        static int[] dy = {-1, 0, 1, 0};
        static int[] dx = {0, 1, 0, -1};
        static int[][] map;
        static boolean[][] check;
    
        public static void bfs() {
            check = new boolean[Y][X];
            Queue<Point> q = new LinkedList<>();
            q.add(new Point(0, 0));
            check[0][0] = true;
            while(!q.isEmpty()) {
                Point now = q.poll();
                for(int d = 0; d < 4; d++) {
                    int ny = now.y + dy[d];
                    int nx = now.x + dx[d];
                    if(ny < 0 || nx < 0 || ny >= Y || nx >= X || check[ny][nx]) continue;
                    if(map[ny][nx] >= 1) {
                        map[ny][nx]++;
                        continue;
                    }
                    q.add(new Point(ny, nx));
                    check[ny][nx] = true;
                }
            }
        }
    
        public static boolean melt() {
            int cnt = 0;
            for(int i = 0; i < Y; i++) {
                for(int j = 0; j < X; j++) {
                    if(map[i][j] >= 2) {
                        map[i][j] = 0;
                        cnt++;
                    }
                }
            }
            if(cnt > 0) piece = cnt;
            return cnt != 0;
        }
    
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            Y = in.nextInt();
            X = in.nextInt();
            map = new int[Y][X];
            for(int i = 0; i < Y; i++)
                for(int j = 0; j < X; j++)
                    map[i][j] = in.nextInt();
            while(true) {
                bfs();
                if(melt()) ret++;
                else break;
            }
            System.out.println(ret);
            System.out.println(piece);
        }
    
        static class Point {
            int y, x;
    
            public Point(int y, int x) {
                this.y = y;
                this.x = x;
            }
        }
    }

    Uploaded by Notion2Tistory v1.1.0

    '알고리즘 > 백준' 카테고리의 다른 글

    [백준]3495. 아스키 도형 (Java)  (0) 2021.08.30
    [백준]2981. 검문 (Java)  (0) 2021.08.30
    [백준]2631. 줄세우기 (Java)  (0) 2021.08.30
    [백준]3190. 뱀 (Java)  (0) 2021.08.30
    [백준]1916. 최소 비용 구하기 (Java)  (0) 2021.08.23

    댓글

Designed by Tistory.