문제 : https://www.acmicpc.net/problem/7576
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
// 가로
int m = scan.nextInt();
// 세로
int n = scan.nextInt();
Node arr[][] = new Node[n][m];
int maxDay = 0;
// 큐선언
Queue queue = new LinkedList();
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
int value = scan.nextInt();
arr[i][j] = new Node(j, i, value);
if (value == 1) {
queue.offer(arr[i][j]);
}
}
}
// 입력부
while (!queue.isEmpty()) {
//
Node polledNode = queue.poll();
Node[] toOfferNode = check(polledNode, m, n, arr);
for (int i = 0; i < 4; i++) {
if (toOfferNode[i] != null) {
toOfferNode[i].value = 1;
if(maxDay < toOfferNode[i].day) {
maxDay = toOfferNode[i].day;
}
queue.offer(toOfferNode[i]);
}
}
// System.out.println(polledNode);
// System.out.println(queue.isEmpty());
}
// for (int i = 0; i < n; i++) {
// for (int j = 0; j < m; j++) {
// System.out.print(arr[i][j].value+"");
// }
// System.out.println();
// }
//
//
// for (int i = 0; i < n; i++) {
// for (int j = 0; j < m; j++) {
// System.out.printf("%2d",arr[i][j].day);
// }
// System.out.println();
// }
//
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if(arr[i][j].value == 0) {
maxDay = -1;
}
}
}
System.out.println(maxDay);
scan.close();
}
static Node[] check(Node node, int m, int n, Node[][] arr) {
Node[] result = new Node[4];
int x[] = { 0, 0, -1, 1 };
int y[] = { -1, 1, 0, 0 };
for (int i = 0; i < 4; i++) {
int chkX = node.x + x[i];
int chkY = node.y + y[i];
if (chkX < 0 || chkY < 0 || chkX >= m || chkY >= n) {
result[i] = null;
} else {
if (arr[chkY][chkX].value == 0) {
arr[chkY][chkX].day = node.day+1;
result[i] = arr[chkY][chkX];
// System.out.println("추가할 노드 : " + result[i]);
}
}
}
return result;
}
static class Node {
int x;
int y;
int value;
int day = 0;
public Node(int x, int y, int value) {
this.x = x;
this.y = y;
this.value = value;
if(value == -1 ) {
this.day = -1;
}
}
@Override
public String toString() {
return "Node [x=" + x + ", y=" + y + ", value=" + value + ", day="+day+"]";
}
}
}
'알고리즘 > 심심풀이 문제풀기' 카테고리의 다른 글
[심심풀이 백준문제풀기] 2667번 단지번호붙이기 (0) | 2018.03.15 |
---|---|
[심심풀이 백준문제풀기] 2178번 미로 탐색 (0) | 2018.03.14 |
[심심풀이 백준문제풀기] 1475번 방 번호 (0) | 2018.03.05 |
[심심풀이 백준문제풀기] 2775번 부녀회장이 될테야 (0) | 2018.03.04 |
[심심풀이 백준문제풀기] 1924번 2007년 (0) | 2018.03.04 |