Written by
Sunwoo Han
on
on
[JAVA]7576. 토마토
7576번: 숨바꼭질
설명
토마토가 모두 익을 때까지의 최소 날짜이므로 BFS로 푼다.
코드
import java.io.*;
import java.util.*;
class Main {
static int m, n;
static int[][] box;
static int[] dx = { 1, -1, 0, 0 };
static int[] dy = { 0, 0, 1, -1};
static class Dot {
int x;
int y;
Dot(int x, int y) {
this.x = x;
this.y = y;
}
}
public static void bfs(int[][] box, int n, int m) {
Queue<Dot> que = new LinkedList<Dot>();
// 익은 토마토 위치 확인
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
if (box[i][j] == 1) // 해당 위치의 토마토가 익었다면
que.offer(new Dot(i, j));
}
}
while(!que.isEmpty()) {
// 익은 토마토의 위치에서 시작
Dot dot = que.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(box[nextX][nextY] != 0) {
continue;
}
box[nextX][nextY] = box[dot.x][dot.y] + 1;
que.offer(new Dot(nextX, nextY));
}
}
int day = 0;
for(int i = 0; i < n; i++) {
for(int j = 0; j < m; j++) {
if(box[i][j] == 0) {
System.out.println(-1);
return;
}
day = Math.max(day, box[i][j]);
}
}
System.out.println(day - 1);
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str = br.readLine().split(" ");
m = Integer.parseInt(str[0]);
n = Integer.parseInt(str[1]);
box = new int[n][m];
for(int i = 0; i < n; i++) {
str = br.readLine().split(" ");
for(int j = 0; j < m; j++) {
box[i][j] = Integer.parseInt(str[j]);
}
}
bfs(box, n, m);
}
}
Comments
ALGORITHM 의 다른 글
-
[JAVA]1037. 약수 04 Jan 2021
-
[JAVA]1018. 체스판 다시 칠하기 04 Jan 2021
-
[JAVA]1010. 다리 놓기 04 Jan 2021
-
[JAVA]7576. 토마토 05 Dec 2020
-
[JAVA]1697. 숨바꼭질 04 Dec 2020
-
[JAVA]5337. 웰컴 03 Dec 2020
-
[JAVA]5217. 쌍의 합 03 Dec 2020
-
[JAVA]4892. 숫자 맞추기 게임 03 Dec 2020
-
[JAVA]4101. 크냐? 02 Dec 2020
-
[JAVA]2558. A+B - 2 02 Dec 2020
-
[JAVA]1550. 16진수 02 Dec 2020
-
[JAVA]압축 25 Oct 2020
-
[JAVA]빗물 25 Oct 2020
-
[JAVA]유기농 배추 22 Oct 2020
-
[JAVA]미로 탐색 21 Oct 2020
-
[JAVA]옥상 정원 꾸미기 08 Oct 2020
-
[JAVA]탑 08 Oct 2020
-
[JAVA]안정적인 문자열 07 Oct 2020
-
[JAVA]균형잡힌 세상 07 Oct 2020
-
[JAVA]괄호의 값 06 Oct 2020
-
[JAVA]쇠막대기 06 Oct 2020
-
[JAVA]카드2 05 Oct 2020
-
[JAVA]큐 2 05 Oct 2020
-
[JAVA]제로 05 Oct 2020
-
[JAVA]괄호 04 Oct 2020
-
[JAVA]AC 04 Oct 2020
-
[JAVA]회전하는 큐 04 Oct 2020
-
[JAVA]스택 수열 04 Oct 2020
-
[JAVA]덱 03 Oct 2020
-
[JAVA]큐 03 Oct 2020
-
[JAVA]스택 03 Oct 2020
-
[JAVA]애너그램 만들기 03 Oct 2020
-
[JAVA]키로거 02 Oct 2020
-
[JAVA]요세푸스 문제 02 Oct 2020
-
[JAVA]방 번호 02 Oct 2020
-
[JAVA]방 배정 01 Oct 2020
-
[JAVA]Strfry 28 Sep 2020
-
[JAVA]에디터 28 Sep 2020
-
[JAVA]개수 세기 28 Sep 2020
-
[JAVA]알파벳 개수 28 Sep 2020
-
[JAVA]별 찍기 - 9 27 Sep 2020
-
[JAVA]별 찍기 - 8 27 Sep 2020
-
[JAVA]별 찍기 - 7 27 Sep 2020
-
[JAVA]별 찍기 - 6 27 Sep 2020
-
[JAVA]별 찍기 - 5 27 Sep 2020
-
[JAVA]별 찍기 - 4 27 Sep 2020
-
[JAVA]별 찍기 - 3 26 Sep 2020
-
[JAVA]별 찍기 - 2 26 Sep 2020
-
[JAVA]별 찍기 - 1 26 Sep 2020
-
[JAVA]카드 역배치 26 Sep 2020
-
[JAVA]핸드폰 요금 26 Sep 2020
-
[JAVA]숫자의 개수 25 Sep 2020
-
[JAVA]숫자 25 Sep 2020
-
[JAVA]일곱 난쟁이 25 Sep 2020
-
[JAVA]대표값2 25 Sep 2020
-
[JAVA]홀수 25 Sep 2020
-
[JAVA]최댓값 24 Sep 2020
-
[JAVA]윷놀이 24 Sep 2020
-
[JAVA]주사위 세개 24 Sep 2020
-
[JAVA]윤년 24 Sep 2020
-
[JAVA]세수정렬 24 Sep 2020
-
[JAVA]시험 성적 23 Sep 2020
-
[JAVA]사칙연산 23 Sep 2020
-
[JAVA]고양이 23 Sep 2020
-
[JAVA]Hello World 23 Sep 2020
-
[JAVA]A+B 23 Sep 2020
-
[JAVA]콜라츠 추측 22 Aug 2020
-
[JAVA]평균 구하기 22 Aug 2020
-
[JAVA]하샤드 수 21 Aug 2020
-
[JAVA]핸드폰 번호 가리기 21 Aug 2020
-
[JAVA]행렬의 덧셈 20 Aug 2020
-
[JAVA]x만큼 간격이 있는 n개의 숫자 20 Aug 2020
-
[JAVA]직사각형 별찍기 11 Aug 2020