#문제
7576번: 토마토
첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토
www.acmicpc.net
#풀이 & 학습한 내용
"BFS로 토마토를 익히는 문제"입니다. bfs를 시작하기 전에 익은 토마토들을 먼저 모두 큐에 넣고 수행하는 것이 핵심입니다. 그리고 bfs가 끝나고 큐가 모두 비워지면 익을 수 있는 토마토는 모두 익은 것이므로, bfs이후에 안익은 토마토가 있는 지 확인하여 모두 익히는 것이 불가능한지 여부를 확인해주면 됩니다.
#소스코드
from collections import deque #큐 사용하기 위해 import
def bfs(q):
while q: #큐가 빌때까지 반복(큐가 비었다는건 익을 수 있는애들은 다 익었다는 의미)
v = q.popleft() #큐에서 하나 꺼내기
nowX = v[0]
nowY = v[1]
count = v[2] #큐에서 꺼낸거까지의 지난 일수
for i in range(4): #상하좌우 방향
newX = nowX + dx[i]
newY = nowY + dy[i]
if (0 <= newX < N) and (0 <= newY < M):
if tomatoes[newX][newY] == 0 and tomatoes[newX][newY] != -1:
tomatoes[newX][newY] = 1 #익음처리
q.append([newX, newY, count + 1]) #날짜 하나 더 지난 상태로 큐에 추가
return count #큐에서 마지막으로 꺼내진거의 지난 일수(모든 토마토 익었으면 답)
def check(answer,tomatoes):
for i in range(len(tomatoes)):
for j in range(len(tomatoes[i])):
if tomatoes[i][j] == 0: #익지 않은게 있다면
return -1
return answer
M,N = map(int,input().split())
tomatoes = [list(map(int,input().split()))for _ in range(N)] #2차원 리스트 입력받기
dx=[0,0,1,-1]
dy=[1,-1,0,0]
q=deque([]) #큐 초기화
for i in range(len(tomatoes)):
for j in range(len(tomatoes[i])):
if tomatoes[i][j] == 1:
q.append([i,j,0]) #★bfs시작전에 익은 토마토 큐에 모두 넣어주기
answer = bfs(q)
print(check(answer,tomatoes))
github.com/HoYoungChun/Algorithm_PS/blob/master/DFS%26BFS/BOJ_7576.py
HoYoungChun/Algorithm_PS
Baekjoon Online Judge, Programmers problem solving by Python, C++ - HoYoungChun/Algorithm_PS
github.com
다음 글을 많이 참조했습니다 velog.io/@devjuun_s/%ED%86%A0%EB%A7%88%ED%86%A0-%EB%B0%B1%EC%A4%80-7576%EB%B2%88python
토마토-백준 7576번(python)
문제 철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자 모양 상자의 칸에 하나씩 넣어서 창고에 보관한다. 창고에 보관되는 토마토들 중
velog.io
'Algorithm > DFS&BFS' 카테고리의 다른 글
| [Python] 백준 1697번 : 숨바꼭질 (S1) - DFS&BFS단계별8 (0) | 2021.03.03 |
|---|---|
| [Python] 백준 7569번 : 토마토 (S1) - DFS&BFS단계별7 (0) | 2021.03.03 |
| [Python] 백준 2178번 : 미로 탐색 (S1) - DFS&BFS단계별5 (0) | 2021.02.03 |
| [Python] 백준 1012번 : 유기농 배추 (S2) - DFS&BFS단계별4 (0) | 2021.02.01 |
| [Python] 백준 2667번 : 단지번호붙이기 (S1) - DFS&BFS단계별3 (0) | 2021.02.01 |