[백준] 7569번 토마토 - 파이썬 python

hyewon9913·2024년 7월 11일
0

코딩테스트(python)

목록 보기
41/46

문제

이 문제는 백준 7576번 문제와 굉장히 유사한 문제이다.

다만 상자가 여러개 쌓이는 것으로 2차원 배열에서 3차원 배열이 됐음을 알 수 있다.

알고리즘을 공부하면서 3차원 배열에 대해서 다룰 일이 별로 없다보니 인덱스 값을 설정해주는 데에서 애를먹었다.

어디가 x 좌표 부분이고 어디가 y좌표 부분인지 이런게 너무 헷갈려서 계속해서 인덱스아웃 에러가 발생했었다.

결론적으로는 matrix[h][n][m] 즉 [z][x][y] 순서가 된다.

그외에 문제 해결방법은 bfs를 통해 해결해주면 된다.

나의 코드

m,n,h = map(int,input().split())


tomatos = []
visited = [[[False]*m for _ in range(n)] for _ in range(h)]

for _ in range(h):
    tmp = []
    for  _ in range(n):
        tmp.append(list(map(int,input().split())))
    tomatos.append(tmp)

from collections import deque
q = deque()

for i in range(h):
    for j in range(n):
        for k in range(m):
            if tomatos[i][j][k] == 1 and visited[i][j][k] == False:
                q.append((i,j,k))
                visited[i][j][k] = True

def bfs():
    dx = [-1,1,0,0,0,0]
    dy = [0,0,-1,1,0,0,]
    dz = [0,0,0,0,1,-1]
    while(q):
        x,y,z = q.popleft()
        for i in range(6):
            nx = dx[i] +x
            ny = dy[i] +y
            nz = dz[i] +z
            if 0<= nx < h and 0<= ny < n and 0<= nz < m:
                #범위내에 있고 방문한 적없는 익지않은 토마토 방문
                if tomatos[nx][ny][nz]== 0 and visited[nx][ny][nz] == False:
                    tomatos[nx][ny][nz] = tomatos[x][y][z] + 1
                    q.append((nx,ny,nz))
                    visited[nx][ny][nz] = True

bfs()

ans = 0
for a in tomatos:
    for b in a:
        for c in b:
            #bfs 실행 후에도 안익은게 있는 경우
            if c == 0:
                print(-1)
                exit(0)
        ans = max(ans,max(b))
print(ans -1)

3차원 배열을 이용한 문제를 처음 접하다 보니 인덱스 설정 관련해서 어려움이 있던 문제였다.

profile
차근차근 굴러가는 코딩일지

0개의 댓글