작성
·
80
·
수정됨
0
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
package DFS_BFS;
import java.util.*;
class Point {
int x, y;
Point(int x, int y) {
this.x = x;
this.y = y;
}
}
public class Main22 {
static int n, m;
static int[][] box;
static int answer = 0;
static int dx[] = {-1, 0, 1, 0};
static int dy[] = {0, 1, 0, -1};
static boolean flag = true;
public static void BFS() {
Queue<Point> Q = new LinkedList<>();
// 처음에 익은 토마토를 큐에 추가
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (box[i][j] == 1) {
Q.offer(new Point(i, j));
}
}
}
while (!Q.isEmpty()) {
int size = Q.size();
for (int s = 0; s < size; s++) {
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 && box[nx][ny] == 0) {
box[nx][ny] = 1;
Q.offer(new Point(nx, ny));
}
}
}
answer++; // 한 레벨 탐색이 끝나면 answer 증가
}
answer--; // 마지막 레벨에서 더 증가된 값을 보정
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
m = sc.nextInt();
n = sc.nextInt();
box = new int[n][m];
// 초기 박스 상태 설정
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
box[i][j] = sc.nextInt();
if (box[i][j] == 0) flag = false;
}
}
// 이미 모두 익었으면 0 출력
if (flag) {
System.out.print(0);
return;
}
// BFS 수행
BFS();
// 모든 칸이 익었는지 검사
flag = true;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
if (box[i][j] == 0) {
flag = false;
break;
}
}
if (!flag) break;
}
// 결과 출력
System.out.print(flag ? answer : -1);
}
}
선생님께서는 dis배열을 만들어서 푸셨는데 저는 생각할때 box배열에 있는 0들을 없앤다는 식으로 생각해서 이런식으로 풀었는데 어떤게 더 효율이좋나요? 이것도 맞는 풀이일까요?
답변