05-15 20:52
Recent Posts
Recent Comments
๊ด€๋ฆฌ ๋ฉ”๋‰ด

miinsun

[BAEKJOON] ๋ฐฑ์ค€ BFS 2636 :: ์น˜์ฆˆ ๋ณธ๋ฌธ

Algorithm/Baekjoon

[BAEKJOON] ๋ฐฑ์ค€ BFS 2636 :: ์น˜์ฆˆ

miinsun 2022. 6. 15. 23:09

๐Ÿ’ฌ  ๋ฌธ์ œ ์„ค๋ช…

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

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

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

 

 

๐Ÿ”จ  ์ž…์ถœ๋ ฅ ์˜ˆ

์ž…๋ ฅ 

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

 

์ถœ๋ ฅ

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

 

์˜ˆ์ œ ์ž…๋ ฅ 1)

13 12
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 0 0 0
0 1 1 1 0 0 0 1 1 0 0 0
0 1 1 1 1 1 1 0 0 0 0 0
0 1 1 1 1 1 0 1 1 0 0 0
0 1 1 1 1 0 0 1 1 0 0 0
0 0 1 1 0 0 0 1 1 0 0 0
0 0 1 1 1 1 1 1 1 0 0 0
0 0 1 1 1 1 1 1 1 0 0 0
0 0 1 1 1 1 1 1 1 0 0 0
0 0 1 1 1 1 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0

 

์˜ˆ์ œ ์ถœ๋ ฅ 1)

3
5

 

โ€‹

๐Ÿ’ป  Main.java

/* ๋ฐฑ์ค€ BFS - 2636 :: ์น˜์ฆˆ */
import java.util.*;
import java.io.*;

class Point {
	int x;
	int y;
	
	Point(int x, int y) {
		this.x = x;
		this.y = y;
	}
}

public class Main{
    static int[][] board;
    static boolean[][] visited;
    static final int dx[] = {-1, 0, 1, 0};  //์ƒํ•˜์ขŒ์šฐ ๋ฐฉํ–ฅ ์„ค์ •
    static final int dy[] = {0, 1, 0, -1};  //์ƒํ™”์ขŒ์šฐ ๋ฐฉํ–ฅ ์„ค์ •
    static int n, m;
    
	public static void main(String[] args)throws IOException { 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        n = Integer.parseInt(st.nextToken());
        m = Integer.parseInt(st.nextToken());
        
        // ์ง€๋„ ์ž…๋ ฅ ๋ฐ›๊ธฐ
        board = new int[n][m];
        int cheese = 0;
        for(int i = 0; i < n; i++) {
        	st = new StringTokenizer(br.readLine());
        	for(int j = 0; j < m; j++) {
        		board[i][j] = Integer.parseInt(st.nextToken());
        		
        		// ๊ฐ–๊ณ  ์žˆ๋Š” ์น˜์ฆˆ์˜ ์ดํ•ฉ
        		if(board[i][j] == 1) {
        			cheese++;
        		}
        	}
        }

        int h = 0;
        int lastCheese = 0;
        // ๋ชจ๋“  ์น˜์ฆˆ๊ฐ€ ๋…น์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
        while(cheese != 0) {
        	h++;
        	lastCheese = cheese;
        	
        	Queue<Point> q = new LinkedList<>();
    		visited = new boolean[n][m];
    		
    		q.add(new Point(0, 0));
    		visited[0][0] = true;
    		while (!q.isEmpty()) {
    			Point tmp = q.poll();
    			for (int i = 0; i < 4; i++) {
    				int nx = tmp.x + dx[i];
    				int ny = tmp.y + dy[i];
    				
    				if (nx < 0 || nx >= n || ny < 0 || ny >= m || visited[nx][ny])
    					continue;
    				if (board[nx][ny] == 1) {
    					cheese--;
    					board[nx][ny] = 0;
    				} else if (board[nx][ny] == 0) {
    					q.offer(new Point(nx, ny));
    				}
    				visited[nx][ny] = true;
    			}
    		}
        }
 
        System.out.println(h);
        System.out.println(lastCheese);
	}
}
Comments