백준 7569. 토마토

2023. 8. 31. 10:46·백준

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

 

7569번: 토마토

첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100,

www.acmicpc.net

import sys
from collections import deque
input = sys.stdin.readline
m, n, h = map(int,input().split())
arr = [[list(map(int,input().split())) for _ in range(n)] for i in range(h)]
q = deque()

di = [-1,1,0,0,0,0]
dj = [0,0,-1,1,0,0]
dz = [0,0,0,0,-1,1]

def bfs():
    while q:  # 1인 곳들을 모두 순회할 때까지
        z, i, j = q.popleft()
        for k in range(6):  # 1인곳 상하좌우앞뒤 탐색해서 +1 해서 익히기
            ni, nj, nz = i + di[k], j + dj[k], z + dz[k]
            if 0 <= ni < n and 0 <= nj < m and 0 <= nz < h:
                if arr[nz][ni][nj] == 0:
                    arr[nz][ni][nj] = arr[z][i][j] + 1
                    q.append((nz,ni,nj))  # 순회해서 익힌 곳도 q에 집어넣기

for k in range(h):
    for i in range(n):
        for j in range(m):
            if arr[k][i][j] == 1:  # 맨처음, 1인 곳을 모두 q에 집어넣기
                q.append((k,i,j))
bfs()

day = 0
for i in arr:
    for j in i:
        for s in j:
            if s == 0:
                print(-1)
                exit()  # 함수 강제종료
        day = max(day, max(j))  # 리스트를 돌면서 최댓값 갱신 
print(day-1) # 디폴트가 1이었으므로 -1해주기

Check Point

  • 시간초과방지 1 : input = sys.stdin.readline -> 보기좋게 input 변수에 할당
  • 시간초과방지 2 : from collections import deque -> pop(0)는 비효율적. popleft()사용
  • 3차원 배열 -> x,y,z 세 델타값 설정(6)
  • 코드 강제종료하는 exit() -> sys를 import해야만 사용가능!
  • bfs를 돌려 visited을 따로 만들지 않고 며칠만에 익는지에 따라 1씩 누적합 해주면서 그 최댓값을 구함
저작자표시 (새창열림)

'백준' 카테고리의 다른 글

백준 5014. 스타트링크  (0) 2023.09.01
백준 1697. 숨바꼭질  (0) 2023.09.01
백준 2644. 촌수계산  (0) 2023.08.29
백준 2667. 단지번호붙이기  (0) 2023.08.29
백준 2606번. 바이러스  (0) 2023.08.29
'백준' 카테고리의 다른 글
  • 백준 5014. 스타트링크
  • 백준 1697. 숨바꼭질
  • 백준 2644. 촌수계산
  • 백준 2667. 단지번호붙이기
버그잡는고양이발
버그잡는고양이발
주니어 개발자입니다!
  • 버그잡는고양이발
    지극히평범한개발블로그
    버그잡는고양이발
  • 전체
    오늘
    어제
    • 분류 전체보기 (382)
      • React (16)
      • Next.js (5)
      • Javascript (5)
      • Typescript (4)
      • Node.js (2)
      • Cs (16)
      • 트러블 슈팅 (5)
      • Html (1)
      • Css (3)
      • Django (0)
      • vue (0)
      • Java (2)
      • Python (0)
      • 독서 (1)
      • 기타 (3)
      • 백준 (192)
      • swea (31)
      • 프로그래머스 (30)
      • 이코테 (4)
      • 99클럽 코테 스터디 (30)
      • ssafy (31)
      • IT기사 (1)
  • 블로그 메뉴

    • 홈
    • 태그
  • 인기 글

  • 태그

    Til
    항해99
    개발자취업
    코딩테스트준비
    99클럽
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
버그잡는고양이발
백준 7569. 토마토
상단으로

티스토리툴바