[Boj문제풀이]

[Boj/백준] 7576 Python

ki7348 2021. 9. 29. 09:22

문제출처:https://www.acmicpc.net/problem/7576

 

7576번: 토마토

첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토

www.acmicpc.net

 

1. 문제 접근 방식

1인 원소를 모두 찾아 리스트에 담고

bfs를 돌린다

이때 중요한게 리스트에 담은 원소들을 모두 큐에 넣고 시작한다(1이 두개 이상일 때를 고려해서)

0인 원소를 만날 때마다 값을 1씩 증가시켜준다.

 

 

2. 내가 푼 코드

import sys
from collections import deque

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

def bfs(arr):
    queue = deque()
    for i in arr:
        queue.append((i[0],i[1]))

    while queue:
        x, y = queue.popleft()
        for i in range(4):
            nx=x+dx[i]
            ny=y+dy[i]
            if nx < 0 or ny < 0 or nx>=n or ny>=m:
                continue
            if graph[nx][ny] == 0:
                graph[nx][ny] = graph[x][y] + 1
                queue.append((nx,ny))

m,n = map(int,sys.stdin.readline().split())
graph = []

for _ in range(n):
    graph.append(list(map(int,sys.stdin.readline().split())))
 
start = []
for i in range(n):
    for j in range(m):
        if graph[i][j] == 1:
            start.append((i,j))

bfs(start)
flag = False
for i in graph:
    if 0 in i:
        flag = True


if flag == True:
    print(-1)
else:
    print(max(map(max,graph))-1)

 

 

3. 결과 및 느낀점

중요한 실수를 했는데 2차원 리스트에서 최대값인 원소 1개를 구하려면

max(max(graph)) 꼴로 하면 안되고 max(map(max,graph))꼴로 구해야 한다.

'[Boj문제풀이]' 카테고리의 다른 글

[Boj/백준] 11497 Python  (0) 2021.10.04
[Boj/백준] 17129 Python  (0) 2021.09.30
[Boj/백준] 22352 Python  (0) 2021.09.28
[Boj/백준] 6118 Python  (0) 2021.09.27
[Boj/백준] 1303 Python  (0) 2021.09.27