티스토리 뷰

알고리즘/백준

백준 7576 (토마토) java

김다미김태리신시아 2022. 11. 28. 22:25

import java.io.*;
import java.util.*;

public class Main {
	static int[][] graph;
	static int[][] visited;
	static Queue<point> q1= new LinkedList<>();
	public static void main(String[] args) throws IOException {
		BufferedReader br= new BufferedReader(new InputStreamReader(System.in));
		String[] line= br.readLine().split(" ");
		int col=Integer.parseInt(line[0]);
		int row=Integer.parseInt(line[1]);
		
		
		graph= new int[row][col];
		visited= new int[row][col];
		
		for(int i=0;i<row;i++)
		{
			line=br.readLine().split(" ");
			
			for(int j=0;j<col;j++)
			{
				if(line[j].equals("1"))
				{
					graph[i][j]=1;
					q1.offer(new point(i,j)); // 익은 토마토를 큐에 저장
				}
				else if(line[j].equals("-1"))
					graph[i][j]=-1;
					
			}
		}// 입력받기
		bfs(row,col);
	
		System.out.println(find(graph));
	}

	static void bfs(int row,int col)
	{
		
		
		int[] dx= {0,0,-1,1};
		int[] dy= {1,-1,0,0};
		
		while(!q1.isEmpty()) 
		{
			point cur=q1.poll();
			visited[cur.x][cur.y]=1;
			
			for(int i=0;i<4;i++)
			{
				int x2=cur.x+dx[i];
				int y2=cur.y+dy[i];
				
				if(x2>=0&&x2<row&&y2>=0&&y2<col)
				{
					if(graph[x2][y2]==0&&visited[x2][y2]==0)
					{
						visited[x2][y2]=1;
						graph[x2][y2]=graph[cur.x][cur.y]+1;
						q1.offer(new point(x2,y2));
					}
				}
			}
		}
		
	}
	static int find(int[][] arr)
	{
		int val=-1;
		
		for(int i=0;i<arr.length;i++)
		{
			for(int j=0;j<arr[i].length;j++)
			{
				if(arr[i][j]==0)
					return -1;
				if(arr[i][j]>val)
					val=arr[i][j];
			}
		}
		
		return val-1;
	}
}

class point
{

	int x;
	int y;
	point(int x,int y)
	{
		this.x=x;
		this.y=y;
	}

}

'알고리즘 > 백준' 카테고리의 다른 글

백준 4963 (섬의 개수) - java  (1) 2022.12.01
백준 16973 (직사각형 탈출) - java  (0) 2022.11.30
백준 13549 (숨바꼭질3) java  (0) 2022.11.28
백준 2146 (다리 만들기) java  (0) 2022.11.27
백준 16234(인구 이동) java  (0) 2022.11.25