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);

토마토는 역시 스테비아 방울토마토

반응형