백준 7576 - 토마토-2차원

Posted by qwlake on July 29, 2020

7576 - 토마토-2차원

1. 개요

https://www.acmicpc.net/problem/7576

2. 코드

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
44
45
46
47
48
import sys
from collections import deque

C, R = map(int, sys.stdin.readline().split())
maze = [[-1]*(C+2)]
for _ in range(R):
    maze.append(list(map(int, f'-1 {sys.stdin.readline().strip()} -1'.split())))
maze.append([-1]*(C+2))

zeros = 0
ones = deque([])
for r in range(1, len(maze)):
    for c in range(1, len(maze[0])):
        if maze[r][c] == 0:
            zeros += 1
        elif maze[r][c] == 1:
            ones.append([(r,c,1)])

times = [0]
while zeros != 0 and len(ones) != 0:
    popped = ones.popleft()
    for r, c, d in popped:
        nxt = []
        if maze[r+1][c] == 0:
            maze[r+1][c] = 1
            nxt.append((r+1, c, d+1))
            zeros -= 1
        if maze[r-1][c] == 0:
            maze[r-1][c] = 1
            nxt.append((r-1, c, d+1))
            zeros -= 1
        if maze[r][c+1] == 0:
            maze[r][c+1] = 1
            nxt.append((r, c+1, d+1))
            zeros -= 1
        if maze[r][c-1] == 0:
            maze[r][c-1] = 1
            nxt.append((r, c-1, d+1))
            zeros -= 1
        if nxt:
            ones.append(nxt)
        else:
            times.append(d)
    times.append(d)
if zeros == 0:
    print(max(times))
else:
    print(-1)

3. 설명

  1. 익지 않은 토마토(0)의 개수를 세어 zeros라고 저장한다.
  2. 익은 토마토 기준으로 BFS 탐색을 한다.
  3. 익지 않은 토마토를 익혔을때 zeros를 하나씩 뺀다.
  4. 탐색을 모두 마친 후 zeros가 0이 아니라면 모두 익히지 못한 것이고, 0이라면 BFS 탐색에 걸린 시간을 출력한다.

4. 여정

  1. 출력미스
  2. 성공

5. 결과

image