์•Œ๊ณ ๋ฆฌ์ฆ˜/๋ฐฑ์ค€

[ ๋ฐฑ์ค€ / BOJ 2636 ] ์น˜์ฆˆ ( ์ž๋ฐ” / JAVA )

KIMHYEYUN 2021. 11. 16. 13:52
๋ฐ˜์‘ํ˜•

https://www.acmicpc.net/problem/2636

 

2636๋ฒˆ: ์น˜์ฆˆ

์•„๋ž˜ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ์ •์‚ฌ๊ฐํ˜• ์นธ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ํŒ์ด ์žˆ๊ณ , ๊ทธ ์œ„์— ์–‡์€ ์น˜์ฆˆ(ํšŒ์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋œ ๋ถ€๋ถ„)๊ฐ€ ๋†“์—ฌ ์žˆ๋‹ค. ํŒ์˜ ๊ฐ€์žฅ์ž๋ฆฌ(<๊ทธ๋ฆผ 1>์—์„œ ๋„ค๋ชจ ์นธ์— X์นœ ๋ถ€๋ถ„)์—๋Š” ์น˜์ฆˆ๊ฐ€ ๋†“

www.acmicpc.net

 

๋ฌธ์ œ


์•„๋ž˜ <๊ทธ๋ฆผ 1>๊ณผ ๊ฐ™์ด ์ •์‚ฌ๊ฐํ˜• ์นธ๋“ค๋กœ ์ด๋ฃจ์–ด์ง„ ์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ํŒ์ด ์žˆ๊ณ , ๊ทธ ์œ„์— ์–‡์€ ์น˜์ฆˆ(ํšŒ์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋œ ๋ถ€๋ถ„)๊ฐ€ ๋†“์—ฌ ์žˆ๋‹ค. ํŒ์˜ ๊ฐ€์žฅ์ž๋ฆฌ(<๊ทธ๋ฆผ 1>์—์„œ ๋„ค๋ชจ ์นธ์— X์นœ ๋ถ€๋ถ„)์—๋Š” ์น˜์ฆˆ๊ฐ€ ๋†“์—ฌ ์žˆ์ง€ ์•Š์œผ๋ฉฐ ์น˜์ฆˆ์—๋Š” ํ•˜๋‚˜ ์ด์ƒ์˜ ๊ตฌ๋ฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

์ด ์น˜์ฆˆ๋ฅผ ๊ณต๊ธฐ ์ค‘์— ๋†“์œผ๋ฉด ๋…น๊ฒŒ ๋˜๋Š”๋ฐ ๊ณต๊ธฐ์™€ ์ ‘์ด‰๋œ ์นธ์€ ํ•œ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋…น์•„ ์—†์–ด์ง„๋‹ค. ์น˜์ฆˆ์˜ ๊ตฌ๋ฉ ์†์—๋Š” ๊ณต๊ธฐ๊ฐ€ ์—†์ง€๋งŒ ๊ตฌ๋ฉ์„ ๋‘˜๋Ÿฌ์‹ผ ์น˜์ฆˆ๊ฐ€ ๋…น์•„์„œ ๊ตฌ๋ฉ์ด ์—ด๋ฆฌ๋ฉด ๊ตฌ๋ฉ ์†์œผ๋กœ ๊ณต๊ธฐ๊ฐ€ ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. <๊ทธ๋ฆผ 1>์˜ ๊ฒฝ์šฐ, ์น˜์ฆˆ์˜ ๊ตฌ๋ฉ์„ ๋‘˜๋Ÿฌ์‹ผ ์น˜์ฆˆ๋Š” ๋…น์ง€ ์•Š๊ณ  ‘c’๋กœ ํ‘œ์‹œ๋œ ๋ถ€๋ถ„๋งŒ ํ•œ ์‹œ๊ฐ„ ํ›„์— ๋…น์•„ ์—†์–ด์ ธ์„œ <๊ทธ๋ฆผ 2>์™€ ๊ฐ™์ด ๋œ๋‹ค.

<๊ทธ๋ฆผ 1> ์›๋ž˜ ์น˜์ฆˆ ๋ชจ์–‘

๋‹ค์‹œ ํ•œ ์‹œ๊ฐ„ ํ›„์—๋Š” <๊ทธ๋ฆผ 2>์—์„œ ‘c’๋กœ ํ‘œ์‹œ๋œ ๋ถ€๋ถ„์ด ๋…น์•„ ์—†์–ด์ ธ์„œ <๊ทธ๋ฆผ 3>๊ณผ ๊ฐ™์ด ๋œ๋‹ค.

<๊ทธ๋ฆผ 2> ํ•œ ์‹œ๊ฐ„ ํ›„์˜ ์น˜์ฆˆ ๋ชจ์–‘

<๊ทธ๋ฆผ 3> ๋‘ ์‹œ๊ฐ„ ํ›„์˜ ์น˜์ฆˆ ๋ชจ์–‘

<๊ทธ๋ฆผ 3>์€ ์›๋ž˜ ์น˜์ฆˆ์˜ ๋‘ ์‹œ๊ฐ„ ํ›„ ๋ชจ์–‘์„ ๋‚˜ํƒ€๋‚ด๊ณ  ์žˆ์œผ๋ฉฐ, ๋‚จ์€ ์กฐ๊ฐ๋“ค์€ ํ•œ ์‹œ๊ฐ„์ด ๋” ์ง€๋‚˜๋ฉด ๋ชจ๋‘ ๋…น์•„ ์—†์–ด์ง„๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์ฒ˜์Œ ์น˜์ฆˆ๊ฐ€ ๋ชจ๋‘ ๋…น์•„ ์—†์–ด์ง€๋Š” ๋ฐ๋Š” ์„ธ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฐ๋‹ค. <๊ทธ๋ฆผ 3>๊ณผ ๊ฐ™์ด ์น˜์ฆˆ๊ฐ€ ๋…น๋Š” ๊ณผ์ •์—์„œ ์—ฌ๋Ÿฌ ์กฐ๊ฐ์œผ๋กœ ๋‚˜๋ˆ„์–ด ์งˆ ์ˆ˜๋„ ์žˆ๋‹ค.

์ž…๋ ฅ์œผ๋กœ ์‚ฌ๊ฐํ˜• ๋ชจ์–‘์˜ ํŒ์˜ ํฌ๊ธฐ์™€ ํ•œ ์กฐ๊ฐ์˜ ์น˜์ฆˆ๊ฐ€ ํŒ ์œ„์— ์ฃผ์–ด์กŒ์„ ๋•Œ, ๊ณต๊ธฐ ์ค‘์—์„œ ์น˜์ฆˆ๊ฐ€ ๋ชจ๋‘ ๋…น์•„ ์—†์–ด์ง€๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„๊ณผ ๋ชจ๋‘ ๋…น๊ธฐ ํ•œ ์‹œ๊ฐ„ ์ „์— ๋‚จ์•„์žˆ๋Š” ์น˜์ฆˆ์กฐ๊ฐ์ด ๋†“์—ฌ ์žˆ๋Š” ์นธ์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

์ž…๋ ฅ


์ฒซ์งธ ์ค„์—๋Š” ์‚ฌ๊ฐํ˜• ๋ชจ์–‘ ํŒ์˜ ์„ธ๋กœ์™€ ๊ฐ€๋กœ์˜ ๊ธธ์ด๊ฐ€ ์–‘์˜ ์ •์ˆ˜๋กœ ์ฃผ์–ด์ง„๋‹ค. ์„ธ๋กœ์™€ ๊ฐ€๋กœ์˜ ๊ธธ์ด๋Š” ์ตœ๋Œ€ 100์ด๋‹ค. ํŒ์˜ ๊ฐ ๊ฐ€๋กœ์ค„์˜ ๋ชจ์–‘์ด ์œ— ์ค„๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ๋‘˜์งธ ์ค„๋ถ€ํ„ฐ ๋งˆ์ง€๋ง‰ ์ค„๊นŒ์ง€ ์ฃผ์–ด์ง„๋‹ค. ์น˜์ฆˆ๊ฐ€ ์—†๋Š” ์นธ์€ 0, ์น˜์ฆˆ๊ฐ€ ์žˆ๋Š” ์นธ์€ 1๋กœ ์ฃผ์–ด์ง€๋ฉฐ ๊ฐ ์ˆซ์ž ์‚ฌ์ด์—๋Š” ๋นˆ์นธ์ด ํ•˜๋‚˜์”ฉ ์žˆ๋‹ค.

 

์ถœ๋ ฅ


์ฒซ์งธ ์ค„์—๋Š” ์น˜์ฆˆ๊ฐ€ ๋ชจ๋‘ ๋…น์•„์„œ ์—†์–ด์ง€๋Š” ๋ฐ ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ์ถœ๋ ฅํ•˜๊ณ , ๋‘˜์งธ ์ค„์—๋Š” ๋ชจ๋‘ ๋…น๊ธฐ ํ•œ ์‹œ๊ฐ„ ์ „์— ๋‚จ์•„์žˆ๋Š” ์น˜์ฆˆ์กฐ๊ฐ์ด ๋†“์—ฌ ์žˆ๋Š” ์นธ์˜ ๊ฐœ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

์ฝ”๋“œ


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main_BOJ_2636_์น˜์ฆˆ {
    static int N, M, cheese, ans, time;
    static int[][] board;
    static boolean[][] isVisited;
    static int[] dx = {-1, 0, 0, 1};
    static int[] dy = {0, -1, 1, 0};
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer stringTokenizer = new StringTokenizer(br.readLine());

        N = Integer.parseInt(stringTokenizer.nextToken());
        M = Integer.parseInt(stringTokenizer.nextToken());

        cheese = 0;
        time = 0; 
        ans = 0;

        board = new int[N][M];
        for(int i = 0 ; i < N ; i++){
            stringTokenizer = new StringTokenizer(br.readLine());
            for(int j = 0 ; j < M ; j++){
                board[i][j] = Integer.parseInt(stringTokenizer.nextToken());
                if(board[i][j] == 1)
                    cheese++;
            }
        }

        while(cheese != 0){
            time++;
            ans = cheese;
            meltCheese();
        }

        System.out.println(time);
        System.out.println(ans);
    }

    private static void meltCheese() {
        Queue<int[]> queue = new LinkedList<>();
        queue.offer(new int[]{0,0});
        isVisited = new boolean[N][M];

        isVisited[0][0] = true;
        while(!queue.isEmpty()){
            int[] cur = queue.poll();
            for(int i = 0 ; i < 4 ; i++){
                int nx = cur[0] + dx[i];
                int ny = cur[1] + dy[i];

                if(nx < 0 || ny < 0 || N <= nx || M <= ny || isVisited[nx][ny])  continue;

                if(board[nx][ny] == 1){
                    cheese--;
                    board[nx][ny] = 0;
                }
                else if(board[nx][ny] == 0){
                    queue.offer(new int[]{nx,ny});
                }

                isVisited[nx][ny] = true;
            }
        }
    }
}

 

728x90
๋ฐ˜์‘ํ˜•