์๊ฐ ํ
์๋
ํ์ธ์ ๊ฐ์ฌ๋! ์ ๊ฐ์ ๊ฒฝ์ฐ์ ๋ ๋ฒจ๊ฐ์ ๋ด๊ณ ์๋ ํด๋์ค๋ฅผ ๋ฐ๋ก ๋ง๋ค์ด BFS ํ ๋ ๋ฒจ๊ฐ์ ๋ฐํํ๋ ์์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ์ฑ์ ์ค์ ๊ณ์ ์๊ฐ์ด๊ณผ๊ฐ ๋์์ ์ง๋ฌธ๋๋ฆฝ๋๋ค. ์๊ฐ์ด๊ณผ๊ฐ ๋๋ ์ด์ ๊ฐ ๋ญ๊น์? package Inflearn.treegraph; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class ํ ๋งํ { // ํ ๋งํ ๋ฐ์ค static int[][] box; // ๋ฉ๋ชจ์ด์ ์ด์
static int[][] dp; static int n; static int m; static Queue queue = new LinkedList(); static class Node{ int i; int j; int level; public Node(int i, int j, int level){ this.i = i; this.j = j; this.level = level; } } static int bfs(){ int answer = 0; while (!queue.isEmpty()){ Node node = queue.poll(); int i = node.i; int j = node.j; // ํ ๋งํ ๊ฐ ๋ค์ด์๊ณ , ๋ฉ๋ชจ์ด์ ์ด์
๋์ง ์์๊ณ , i, j๊ฐ ๋ฒ์๋ฅผ ๋์ด์์ง ์์ผ๋ฉด if(validateLocation(i,j) && box[i][j] != -1 && dp[i][j] == 0) { // ํ ๋งํ ๋ฅผ ์ตํ๋ค. if(box[i][j] == 0) box[i][j] = 1; // ๋ฉ๋ชจ์ด์ ์ด์
dp[i][j] = 1; // ์ํ์ข์ฐ ํ์ ๋ฃ๊ธฐ queue.add(new Node(i, j-1, node.level+1)); queue.add(new Node(i, j+1, node.level+1)); queue.add(new Node(i-1, j, node.level+1)); queue.add(new Node(i+1, j, node.level+1)); // ์ ๋ต ๊ฐฑ์ answer = node.level; } } return isThereNotRiped() ? answer : -1; } static boolean validateLocation(int i, int j) { if(i n-1 || j m-1) return false; return true; } static boolean isThereNotRiped(){ for(int i = 0 ; i