Algorithm/BAEKJOON
[C#]백준 7576 토마토
zz0zz9
2025. 6. 28. 23:57
반응형
반응형
https://www.acmicpc.net/problem/7576
문제 요약
토마토가 전부 익을 때까지 걸리는 시간 출력하기(하나라도 못 익는 토마토가 있으면 -1 출력)
풀이(BFS)
var R=()=>Console.ReadLine().Split().Select(int.Parse).ToArray();var s=R();
int n=s[1],m=s[0],c=0; //c는 토마토가 익을 때까지 걸리는 기간
var b=new int[n][]; //가변배열 선언
int[] dy={-1,1,0,0},dx={0,0,-1,1};
Queue<(int,int)> q=new();
for(int i=0;i<n;)b[i++]=R(); //b에 입력받은 배열 한 줄씩 저장
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
if(b[i][j]==1)q.Enqueue((i,j)); //b의 모든 요소를 돌면서 1이 있는 좌표를 q에 저장
while(q.Count>0)
{
var(y,x)=q.Dequeue(); //q의 좌표를 저장
for(int d=0;d<4;d++)
{
int ny=y+dy[d],nx=x+dx[d];
if(ny>=0&&ny<n&&nx>=0&&nx<m&&b[ny][nx]==0) //해당 좌표의 토마토가 익지 않았을 때
{
b[ny][nx]=b[y][x]+1; //해당 좌표를 새 토마토가 익은 날짜+1로 수정
q.Enqueue((ny,nx)); //q에 해당 좌표 추가
}
}
}
foreach(var r in b)
foreach(var v in r)
{
if(v==0)
{
Console.Write(-1); //b의 요소 중 하나라도 안 익은 토마토(0)가 있으면 바로 -1 출력
return;
}
c=c>v?c:v;
}
Console.Write(c-1);
토마토는 역시 스테비아 방울토마토
반응형