[www.acmicpc.net/problem/7569]
#풀이- bfs알고리즘
1. 입력을 3차원 배열로 받아주고, 처음에 존재하는 토마토의 위치를 파악한다.
2. bfs알고리즘 실행
3. 배열에 0 이 존재하면 -1을 출력하고, 0이 없으면 배열의 최댓값 -1을 출력한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | import sys from collections import deque input = lambda : sys.stdin.readline().rstrip() x,y,z=map(int,input().split()) tomato=[[list(map(int,input().split())) for _ in range(y)] for _ in range(z)] #이동 가능 dx=[1,-1,0,0,0,0] dy=[0,0,1,-1,0,0] dz=[0,0,0,0,1,-1] def bfs(): while queue: a,b,c=queue.popleft() for i in range(6): da=a+dz[i] db=b+dy[i] dc=c+dx[i] if 0<=da<z and 0<=db<y and 0<=dc<x and not tomato[da][db][dc]: tomato[da][db][dc]=tomato[a][b][c]+1 queue.append((da,db,dc)) #며칠 지났는지 혹은 안익은 토마토 있는지 판단 max=0 for i in range(z): for j in range(y): for k in range(x): if tomato[i][j][k] > max: max=tomato[i][j][k] elif not tomato[i][j][k]: return -1 return max-1 queue=deque() #처음에 있는 토마토 판정 for i in range(z): for j in range(y): for k in range(x): if tomato[i][j][k]==1: queue.append((i,j,k)) #출력 print(bfs()) | cs |




댓글 쓰기