본문 바로가기

알고리즘 문제풀이

백준7576 - 토마토 java

728x90
package a0225;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;

public class 백준7576토마토 {

	static int garo ;
	static int sero ;
	
	static int[][] arr ;
	static int[][] visit ;
	static int maxday;
	
	static int search() {		// 0이 하나라도 있으면 1반환, 0이 없으면 0 반환
		int flag = 0;
		for(int i=0; i<sero; i++) {
			for(int j=0; j<garo; j++) {
				if(arr[i][j] == 0) {
					flag = 1;
					return flag;
				}
			}
		}
		return flag;
	}
	
	static int[] di = { -1, 0, 1, 0};
	static int[] dj = {0, 1, 0, -1};			//방향 6개 (위,아래,상우하좌)
	
	static boolean check(int i, int j) {
		if(0<=i&&i<sero && 0<=j&&j<garo)return true;
		return false;
	}
	
	
	static void bfs() {
		
		Queue<int[]> q = new LinkedList<int[]>();		//좌표 큐 선언
		
								//초기설정
		for(int i=0; i<sero; i++) {
			for(int j=0; j<garo; j++) {
				if(arr[i][j] == 1) {
					q.add(new int[] {i,j,0});		//좌표 + day
				}
			}
		}
		
		
		while(!q.isEmpty()) {
			int[] now = q.poll();
			int nowi = now[0]; int nowj = now[1]; int day = now[2];
			
			maxday = Math.max(maxday, day);
			
			for(int d=0; d<4; d++) {
				int ni = nowi+di[d];
				int nj = nowj+dj[d];
				
				if(check(ni,nj) && arr[ni][nj]==0 && visit[ni][nj]==0) {
					visit[ni][nj] = 1;
					arr[ni][nj] = 1; //arr[ni][nj]
					q.add(new int[] {ni, nj, day+1});
				}
			}
		}
		
	}
	
	
	
	
	public static void main(String[] args) throws Exception{
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer ST = new StringTokenizer(br.readLine());
		
		garo = Integer.parseInt(ST.nextToken());
		sero = Integer.parseInt(ST.nextToken());
		
		arr = new int[sero][garo];
		visit = new int[sero][garo];
		
		
		for(int i=0; i<sero; i++) {
			ST = new StringTokenizer(br.readLine());
			for(int j=0; j<garo; j++) {
				arr[i][j] = Integer.parseInt(ST.nextToken());
			}
		}
		
		
		if(search()==0)System.out.println(0);	//처음부터 모두 익어있는 경우
		else {
			bfs();
			if(search()==1)System.out.println(-1);		//bfs 다 돌렸는데도 안익은곳 있는경우
			else {
				System.out.println(maxday);
			}
		}
		
	}

}

'알고리즘 문제풀이' 카테고리의 다른 글

백준2563-색종이 java  (0) 2022.02.26
백준2559-수열 java  (0) 2022.02.26
백준2491-수열 java  (0) 2022.02.26
백준2477-참외밭 java  (0) 2022.02.26
백준2309-일곱난쟁이 java  (0) 2022.02.26