https://github.com/Dev-Guccin
Guccin
https://github.com/Dev-Guccin
전체 방문자
오늘
어제
  • 분류 전체보기 (172)
    • 알고리즘 (140)
    • 삽질방지 (13)
    • SystemHacking (1)
    • 일상 (4)
    • 개발 (8)
    • 스프링 부트 REST API 개발일지 (5)
    • JPA (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 최소힙
  • DFS
  • DP
  • counter
  • 다이나믹프로그래밍
  • 프로그래머스
  • heapq
  • 백준
  • 유클리드호제법
  • 재귀
  • 12015
  • 유니온 파인드
  • 다익스트라
  • 최단경로
  • python3
  • LIS
  • 다이나믹 프로그래밍
  • MST
  • 그래프
  • BFS
  • 이분 탐색
  • 최대공약수
  • 백트래킹
  • 이분탐색
  • 파이썬
  • 재귀함수
  • Python
  • 스택
  • 그리디
  • 큐

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
https://github.com/Dev-Guccin

Guccin

알고리즘

백준 7569 토마토 (BFS, 3차원)

2021. 7. 9. 22:50

이번 문제는 저번 7576문제를 3차원으로 바꾼 문제이다.

https://guccin.tistory.com/92

 

백준 7576 토마토 (BFS, 행렬 그래프, python)

이번 문제는 원리도 파악하고 간단히 풀수 있다고 생각하고 코딩을 진행했다. 모든 예를 통과하고 반례도 통과하며 잘 코딩했다고 생각했으나 시간초과의 벽을 넘지 못하고 고수들의 코드를 보

guccin.tistory.com

 

조건은 똑같다. 하루마다 양 사이드의 토마토가 익어가는데 추가되는 조건은 위아래 상자도 같이 적용된다는 것이다. 대충 3차원으로 생각해보고 위아래 같이 익게하는 조건을 추가하면 끝이다.

from collections import deque
m,n,h = map(int, input().split()) #열 행 상자수

q = deque([])
M = []
for x in range(h):
    tmp = []
    for y in range(n):
        tmp1 = list(map(int, input().split()))
        for z in range(m):
            if tmp1[z] == 1:
                q.append([x,y,z])
        tmp.append(tmp1)
    M.append(tmp)

def BFS():
    dx = [0,0,1,-1] # 동서남북
    dy = [1,-1,0,0]
    day = -1
    while q:
        day += 1
        for _ in range(len(q)):
            z,x,y = q.popleft()
            for i in range(4):
                nx = x + dx[i]
                ny = y + dy[i]
                if (0<=nx<n) and (0<=ny<m) and (M[z][nx][ny]==0):
                    M[z][nx][ny] = 1
                    q.append([z,nx,ny])
            nz = z - 1
            if (0<=nz<h) and (M[nz][x][y]==0):
                M[nz][x][y] = 1
                q.append([nz, x,y])
            nz = z + 1
            if (0<=nz<h) and (M[nz][x][y]==0):
                M[nz][x][y] = 1
                q.append([nz, x,y])
    for z in range(h):
        for y in range(n):
            if 0 in M[z][y]:
                return -1
    return day 
print(BFS())

'알고리즘' 카테고리의 다른 글

백준 1707 python 풀이 (이분 그래프, BFS)  (0) 2021.07.11
백준 7562 python 풀이 (나이트의 이동, BFS, 그래프)  (0) 2021.07.10
백준 1697 숨바꼭질 (BFS)  (0) 2021.05.18
백준 7576 토마토 (BFS, 행렬 그래프, python)  (0) 2021.05.05
백준 2178 미로 탐색 (BFS, 최단 경로 탐색, 행렬그래프)  (0) 2021.04.29
    '알고리즘' 카테고리의 다른 글
    • 백준 1707 python 풀이 (이분 그래프, BFS)
    • 백준 7562 python 풀이 (나이트의 이동, BFS, 그래프)
    • 백준 1697 숨바꼭질 (BFS)
    • 백준 7576 토마토 (BFS, 행렬 그래프, python)
    https://github.com/Dev-Guccin
    https://github.com/Dev-Guccin
    https://github.com/Dev-Guccin

    티스토리툴바