Hikenny25

7576 - 토마토 본문

baekjoon (solved.ac)/class 3 Solve

7576 - 토마토

hikenny 2022. 11. 1. 18:23

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

 

7576번: 토마토

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

www.acmicpc.net

 

 

- BFS

 

import sys
input = sys.stdin.readline

from collections import deque

m, n = map(int, input().split())
tomato = [list(map(int, input().split())) for _ in range(n)]

q = deque()
for i in range(n):
    for j in range(m):
        if tomato[i][j] == 1:
            q.append([i,j])

delta = [(-1,0),(1,0),(0,-1),(0,1)]
predecessor = [[0] * m for _ in range(n)]

while len(q) != 0:
    r, c = q.pop()
    for i, j in delta:
        dr = r + i
        dc = c + j
        if 0 <= dr < n and 0 <= dc < m and tomato[dr][dc] == 0:
            tomato[dr][dc] = 1
            q.appendleft([dr,dc])
            predecessor[dr][dc] = predecessor[r][c] + 1

for i in range(n):
    for j in range(m):
        if tomato[i][j] == 0:
            print(-1)
            exit()

m = 0
for i in predecessor:
    k = max(i)
    if k > m:
        m = k

print(m)

 

BFS 문제의 정석, 토마토 문제를 풀었다!

요번에 백준 시작하고 처음 푼 골드 문제 ㅎㅎㅎ

 

그렇게 어렵지는 않다

큐에 원래 1이었던 정점을 넣어주고 똑같이 bfs 돌리면 된다

 

근데 이상하게 카운트를 어떻게 해야할지 모르겠어서.. 그림 그렸는데 그냥 저번에 미로 찾기 하던거랑 똑같이 predecessor 리스트 만들어주면 해결이었다~~

 

 

+) 실력이 마구마구 늘어나니 나중에는 CP도 해보고 싶다 Atcoder랑 Codeforces에서 ㅎㅎㅎ 이미 회원가입은 해놨다

++) 집에 종만북 책 사둔거 있었는데 예전에 읽다가 어려워서 포기했었다.. 근데 이제 한 번 도전해볼만 할듯ㅎ 다음주에 가져올 예정

'baekjoon (solved.ac) > class 3 Solve' 카테고리의 다른 글

10026 - 적록색약  (0) 2022.11.03
7569 - 토마토  (0) 2022.11.01
5525 - IOIOI  (2) 2022.10.31
1992 - 쿼드트리  (0) 2022.10.31
1389 - 케빈 베이컨의 6단계 법칙  (0) 2022.10.31
Comments