[백준] 7576번, 7569번 토마토

heering·2023년 2월 24일
0

백준

목록 보기
7/11

1. 7576번 토마토 (2차원 배열)

from collections import deque

def bfs():
    while q:
        x, y = q.popleft()

        for i in range(0, 4):
            nx = x + dx[i]
            ny = y + dy[i]

            if 0<=nx<N and 0<=ny<M and l[nx][ny] == 0:
                q.append((nx, ny))
                l[nx][ny] = l[x][y] + 1 # 익음

M, N = map(int, input().split()) # 행이 N, 열이 M
l = []
for i in range(0, N):
    l.append(list(map(int, input().split())))

dx = [-1, 0, 1, 0]
dy = [0, 1, 0, -1]

q = deque()

for i in range(0, N):
    for j in range(0, M):
        if l[i][j] == 1:
            q.append((i, j))

bfs()

maximum = 0
for i in range(0, N):
    for j in range(0, M):
        if l[i][j] == 0:
            print(-1)
            exit()
        maximum = max(maximum, l[i][j])

print(maximum-1)

2. 7569번 토마토 (3차원 배열)

from collections import deque

def bfs():
    while q:
        x, y, z = q.popleft()

        for i in range(0, 6):
            nx = x + dx[i]
            ny = y + dy[i]
            nz = z + dz[i]

            if 0<=nx<H and 0<=ny<N and 0<=nz<M and l[nx][ny][nz] == 0:
                q.append((nx, ny, nz))
                l[nx][ny][nz] = l[x][y][z] + 1

dx = [-1, 0, 1, 0, 0, 0]
dy = [0, 1, 0 ,-1, 0, 0]
dz = [0, 0, 0, 0, 1, -1]

M, N, H = map(int, input().split()) # M: 열, N: 행, H: 높이
l = []
for i in range(0, H):
    tmp = []
    for j in range(0, N):
        tmp.append(list(map(int, input().split())))
    l.append(tmp)

q = deque()

for i in range(0, H):
    for j in range(0, N):
        for k in range(0, M):
            if l[i][j][k] == 1:
                q.append((i, j, k))

bfs()

maximum = 0
for i in range(0, H):
    for j in range(0, N):
        for k in range(0, M):
            if l[i][j][k] == 0:
                print(-1)
                exit()
            else:
                maximum = max(maximum, l[i][j][k])

print(maximum - 1)

3차원 배열 처리는 이렇게 하는구나
삼중 for문에서 H가 가장 바깥으로 나온다는 걸 생각 못함

0개의 댓글