반응형

7576번 토마토 문제

링크: 7576번: 토마토 (acmicpc.net)

 

7576번: 토마토

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

www.acmicpc.net

 

최소날짜를 보고 bfs로 탐색하면 되겠구나라고 생각했습니다.

문제를 어느정도 풀다보니 골드의 문제까지는 어느정도 어떤 알고리즘을 사용하여 풀어나갈지

감이 잡히더라구요.

 

이런 류의 문제는 풀어본 유형중에도 비슷한 것이 많았어서 쉽게 쉽게 코드를 써나가고 쉽게 풀어낸 것 같습니다.

코드는

 

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
import sys
from collections import deque
input=sys.stdin.readline
q=deque()
d=[-1,1,0,0]
answer=0
def bfs():
    while q:
        y,x=q.popleft()
        for i in range(4):
            dx=x+d[i]
            dy=y+d[3-i]
            if 0<=dx<and 0<=dy<and board[dy][dx]==0:
                q.append((dy,dx))
                board[dy][dx]=board[y][x]+1
 
    find()
    
def find():
    global answer
    for i in board:
        for j in i:
            if j==0:
                answer=0
                return
            else:
                answer=max(answer,j)
                
M,N=map(int,input().split())
board=[list(map(int,input().split())) for _ in range(N)]
for i in range(N):
    for j in range(M):
        if board[i][j]==1:
            q.append((i,j))
bfs()
print(answer-1)
 
cs

궁금한 점은 댓글로 남겨주세요!

부족한 코드지만 읽어주셔서 감사합니다

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기