-
(백준) 7576: 토마토CS/Algorithm 2025. 1. 3. 15:50반응형
인접한 토마토들이 익는다고 하였으므로 BFS로 간단하게 해결 할 수 있다.
https://www.acmicpc.net/problem/7576
from collections import deque m,n = map(int,input().split()) #n은 가로이지만 배열에서는 세로가 되고 m은 세로이지만 배열에서 가로가 된다 box = [] queue = deque() #토마토 입력 for i in range(n): row = list(map(int,input().split())) for j in range(m): #토마토가 있는지 체크 if row[j] == 1: queue.append((i,j)) box.append(row) # 상하좌우 이동을 위한 방향 벡터 dx = [0, 0, -1, 1] # 상하좌우 dy = [-1, 1, 0, 0] # 상하좌우 def bfs(): while(queue): x,y = queue.popleft() for i in range(4): nx = x + dx[i] ny = y + dy[i] if 0 <= nx < n and 0 <= ny < m and box[nx][ny] == 0: queue.append((nx,ny)) box[nx][ny] = box[x][y] + 1 bfs() result = 0 for i in range(n): for j in range(m): if box[i][j] == 0: print(-1) exit(0) # 최대 일수 갱신 result = max(result, box[i][j]) # 처음 토마토가 1이었으므로 1을 빼줌 print(result - 1)주의할점은
1.이차원 배열이므로 x,y의 좌표계가 바뀌게 된다.
2.BFS는 deque로 큐를 만들어서 구한다. 인접한 노드들을 큐에 넣으면 되는 간단한 구조를 가지고 있다.
3.BFS 문제 유형은 box[nx][ny] = box[x][y] + 1 를 해주는 경우가 많은데 이는 문제를 해결하기 위해서 기록을 해두는 것이다.
예를들면 미로 찾기도 최적 경로를 계산할때 위와 같은 방법을 사용한다.
반응형'CS > Algorithm' 카테고리의 다른 글
(백준) 1012번 유기농 배추 (2) 2025.01.02 (백준)2346 (1) 2024.08.24 (백준)4949- rstrip() vs strip() (0) 2024.08.22 (백준) 9012 (2) 2024.08.20 (백준)1929번 에라토스테네스의 체 알고리즘 (4) 2024.08.15