Dizzy999
dizzy-theme
Dizzy999
전체 방문자
오늘
어제
  • 분류 전체보기 (34)
    • Machine Learning (1)
      • 논문 리뷰 (0)
      • 수학통계 이론 (1)
      • 짧은글 (0)
    • 알고리즘 (22)
      • 알고리즘 이론 (1)
      • 알고리즘 문제 (20)
      • 짧은글 (1)
    • 프로그램 (2)
      • 프로그래밍 용어 및 상식 (1)
      • C++ (1)
    • 미니프로젝트 (0)
      • Moon Tracker (0)
    • Theme (0)
      • 짧은글 (0)
    • 아두이노&라즈베리파이 (1)
      • 아두이노 (0)
      • 라즈베리파이 (1)
    • Miscellaneous (3)
      • 이과가 이해한 Color (3)
    • OpenCV (0)
      • Tutorial (0)
    • Manim (5)
      • Tutorial (5)

블로그 메뉴

  • 홈
  • 방명록
  • 태그

공지사항

인기 글

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Dizzy999

dizzy-theme

[백준-7569] 토마토 - Python
알고리즘/알고리즘 문제

[백준-7569] 토마토 - Python

2022. 3. 10. 16:15

 

 

문제 소개

 

철수의 토마토 농장에서는 토마토를 보관하는 큰 창고를 가지고 있다. 토마토는 아래의 그림과 같이 격자모양 상자의 칸에 하나씩 넣은 다음, 상자들을 수직으로 쌓아 올려서 창고에 보관한다.

창고에 보관되는 토마토들 중에는 잘 익은 것도 있지만, 아직 익지 않은 토마토들도 있을 수 있다. 보관 후 하루가 지나면, 익은 토마토들의 인접한 곳에 있는 익지 않은 토마토들은 익은 토마토의 영향을 받아 익게 된다. 하나의 토마토에 인접한 곳은 위, 아래, 왼쪽, 오른쪽, 앞, 뒤 여섯 방향에 있는 토마토를 의미한다. 대각선 방향에 있는 토마토들에게는 영향을 주지 못하며, 토마토가 혼자 저절로 익는 경우는 없다고 가정한다. 철수는 창고에 보관된 토마토들이 며칠이 지나면 다 익게 되는지 그 최소 일수를 알고 싶어 한다.

토마토를 창고에 보관하는 격자모양의 상자들의 크기와 익은 토마토들과 익지 않은 토마토들의 정보가 주어졌을 때, 며칠이 지나면 토마토들이 모두 익는지, 그 최소 일수를 구하는 프로그램을 작성하라. 단, 상자의 일부 칸에는 토마토가 들어있지 않을 수도 있다.

 

 

 

 

사용한 알고리즘

 

더보기

BFS

 

 

 

Code 

 

# Python code

###########################################################
import sys
import collections
import itertools
import copy

input=sys.stdin.readline
sys.setrecursionlimit(10**7)
###########################################################


M , N , H = map(int,input().split())
MaxIter = max(M,N,H) + 1
Arr = []
Tomato_Q = collections.deque([])
zeroCount = 0
Tomato_zero = 0

for h in range(H):
    arrayH = []
    #arrayN = []
    for n in range(N):
        temp_ = list(map(int,input().split(" ")))
        arrayH.append(temp_)

        for m in range(M):
            if temp_[m] == 1:
                Tomato_Q.append([m, n, h])
            elif temp_[m] == 0:
                zeroCount += 1
    Arr.append(arrayH)


# Arr[h][n][m]

dm = [-1,1,0,0,0,0]
dn = [0,0,1,-1,0,0]
dh = [0,0,0,0,1,-1]
Day = 0

while Tomato_Q:
    Day += 1
    for _ in range(len(Tomato_Q)):
        start_m,start_n,start_h = Tomato_Q.popleft()

        for i in range(6):
            new_m = start_m + dm[i]
            new_n = start_n + dn[i]
            new_h = start_h + dh[i]

            if 0<=new_m<M and 0<=new_n<N and 0<=new_h<H and Arr[new_h][new_n][new_m]==0:
                Tomato_Q.append([new_m,new_n,new_h])
                Tomato_zero += 1
                Arr[new_h][new_n][new_m]=1



if Tomato_zero==zeroCount:
    print(Day-1)
else :
    print(-1)

 

 

 

반응형
저작자표시 비영리 변경금지 (새창열림)

'알고리즘 > 알고리즘 문제' 카테고리의 다른 글

[백준-10451] 순열 사이클- Python  (0) 2022.03.05
[백준-2331] 반복수열 - Python  (0) 2022.03.05
[백준-9663] N-Queen - Python  (0) 2022.03.05
[백준-4963] 섬의 개수 - Python  (0) 2021.12.08
[백준-9205] 맥주 마시면서 걸어가기 - Python  (0) 2021.12.08
    '알고리즘/알고리즘 문제' 카테고리의 다른 글
    • [백준-10451] 순열 사이클- Python
    • [백준-2331] 반복수열 - Python
    • [백준-9663] N-Queen - Python
    • [백준-4963] 섬의 개수 - Python
    Dizzy999
    Dizzy999

    티스토리툴바