-
Notifications
You must be signed in to change notification settings - Fork 2
/
김지원.java
98 lines (86 loc) · 3.14 KB
/
김지원.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
public class Main {
static int[] dx = { -1, 1, 0, 0 };
static int[] dy = { 0, 0, -1, 1 };
public static void main(String args[]) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream("input.txt")));
// BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().split(" ");
int M = Integer.parseInt(str[0]);
int N = Integer.parseInt(str[1]);
int[][] arr = new int[N][M];
for (int i = 0; i < N; i++) {
str = br.readLine().split(" ");
for (int j = 0; j < M; j++) {
arr[i][j] = Integer.parseInt(str[j]);
}
}
//----------------- 입력 부 ------------------
BFS(arr, N, M);
}
public static void BFS(int[][] arr, int N, int M) {
Queue<DOT> q = new LinkedList<DOT>();
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (arr[i][j] == 1)
//익은 토마토가 있는 모든 위치를 큐에 담는다.
q.add(new DOT(i, j));
}
}
while (!q.isEmpty()) {
//익은 토마토의 상하좌우는 다음에 익기 때문에 큐에 담아야한다.
DOT dot = q.poll();
for (int i = 0; i < 4; i++) {
int nextX = dot.x + dx[i];
int nextY = dot.y + dy[i];
//범위 밖 패스
if (nextX < 0 || nextY < 0 || nextX >= N || nextY >= M) {
continue;
}
//다음 위치가 익지 않은 토마토가 아니면 패스
if (arr[nextX][nextY] != 0) {
continue;
}
//최대 일수를 구하기 때문에 1로 바꾸는 것이 아니라 현재 일수 +1 을 해줘야한다.
arr[nextX][nextY] = arr[dot.x][dot.y] + 1;
q.add(new DOT(nextX, nextY));
}
//print(arr, N, M); // 농장 전체 출력
//System.out.println();
}
int max = 0;
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
if (arr[i][j] == 0) {
//토마토가 모두 익지 못한 상황이라면 -1 을 출력한다.
System.out.println(-1);
return;
}
max = Math.max(max, arr[i][j]);
}
}
//그렇지 않다면 최대값을 출력한다.
System.out.println(max - 1);
}
//농장을 전체 보여주는 함수
public static void print(int[][] arr, int N, int M) {
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
System.out.print(arr[i][j] + " ");
}
System.out.println();
}
}
}
class DOT {
int x;
int y;
DOT(int x, int y) {
this.x = x;
this.y = y;
}
}