Baekjoon/DFS와 BFS

🥇[백준] 7569 토마토 (골드5) / BFS, 3차원 리스트

2023. 4. 30. 16:12

문제요약

나의 코드 및 설명

import sys
from collections import deque

def bfs():
    global days
    while queue:
        x,y,z = queue.popleft()
        for i in range(6):
            nx = x + dx[i]
            ny = y + dy[i]
            nz = z + dz[i]
            if nx<0 or ny<0 or nz<0 or nx>=m or ny>=n or nz>=h:
                continue
            else:
                #다음 좌표가 아직 익지 않은 토마토(0)이고, 방문하지 않았다면,
                if board[nz][ny][nx] == 0 and visited[nz][ny][nx] == 0:
                    #토마토가 익는다.
                    board[nz][ny][nx] = 1
                    #다음 좌표의 방문 테이블 값은 현재 좌표 값 + 1
                    visited[nz][ny][nx] = visited[z][y][x] + 1
                    #날짜 변수에 저장
                    days = visited[nz][ny][nx]
                    #다음 좌표를 큐에 넣는다
                    queue.append((nx, ny, nz))

m,n,h = map(int, input().split()) #m:가로 / n:세로 / h:높이

#입력값 3차원 리스트에 저장
board = [[list(map(int, sys.stdin.readline().split())) for _ in range(n)] for _ in range(h)]

dx = [1,0,-1,0,0,0]
dy = [0,1,0,-1,0,0]
dz = [0,0,0,0,-1,1]

#3차원 방문 리스트 초기화 
visited = [[[0]*m for _ in range(n)] for _ in range(h)]

days = 0

queue = deque()

#먼저, 익은 토마토가 있는 좌표를 찾아낸다.
for i in range(h):
    for j in range(n):
        for k in range(m):
            if board[i][j][k] == 1:
                queue.append((k,j,i)) #가로,세로,높이

bfs() #bfs 함수 실행
ans = days

for i in range(h):
    for j in range(n):
        for k in range(m):
            if board[i][j][k] == 0:
                ans = -1
                break
        if ans == -1:
            break
    if ans == -1:
        break

print(ans)

3차원 리스트 : [[[0 for _ in range(가로)] for _ in range(세로)] for _ in range(높이)]

##3차원 리스트 입력

[[list(map(int, input().split())) for _ in range(세로)] for _ in range(h)]

피드백

이전에 풀은 백준 7576 토마토 문제와 비슷하지만 3차원 리스트를 활용해야 하는 문제. 3차원 리스트를 연습할 수 있어서 좋았고, 며칠 뒤에 다시 한 번 풀어봐야겠다.

'Baekjoon > DFS와 BFS' 카테고리의 다른 글

[백준] 1743 음식물 피하기 (실버1) / DFS  (1) 2023.04.30
🥇[백준] 10026 적록색약 (골드5) / BFS  (0) 2023.04.30
🥇[백준] 7576 토마토 (골드5) / BFS  (0) 2023.04.30
[백준] 2468 안전 영역 (실버1) / BFS  (0) 2023.04.26
[백준] 11724 연결 요소의 개수 (실버2) / DFS  (0) 2023.04.26
'Baekjoon/DFS와 BFS' 카테고리의 다른 글
  • [백준] 1743 음식물 피하기 (실버1) / DFS
  • 🥇[백준] 10026 적록색약 (골드5) / BFS
  • 🥇[백준] 7576 토마토 (골드5) / BFS
  • [백준] 2468 안전 영역 (실버1) / BFS
hellosonic
hellosonic
hellosonic
꾸준함
hellosonic
전체
오늘
어제
  • 분류 전체보기 (285)
    • SSAFY (4)
    • 프로그래머스 데브코스 (26)
    • Diary (1)
    • JavaScript (20)
    • ToyPJ (13)
      • Python-Django (13)
    • CS지식 (11)
      • 자료구조 (5)
      • 개발 상식 (2)
      • 네트워크 (4)
    • Baekjoon (141)
      • IM Level (57)
      • DFS와 BFS (21)
      • 백트래킹 (21)
      • DP (3)
      • 이분탐색 (4)
      • 구현 (14)
    • Programmers (13)
      • Lv1 (4)
      • Lv2 (9)
    • SWEA (SW Expert Academy) (52)
      • D1 (5)
      • D2 (7)
      • D3 (40)
    • 이코테 (4)
    • Grammar (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • 글쓰기
  • 관리자

공지사항

인기 글

태그

  • 백준
  • 파이썬
  • 프로그래머스
  • SWEA
  • 리액트 todolist
  • 구현
  • 파이썬 2529
  • 파이썬 1946
  • 그리디
  • JS
  • SWEA/D3
  • 자바스크립트
  • 파이썬 11478
  • 백준 18870
  • 백준 2999
  • 국비지원교육
  • 백준 1157
  • 파이썬 1269
  • SWEA D2
  • 이코테
  • 자바스크립트 기본기
  • 파이썬 1436
  • 백준 5212
  • SWEA D3
  • 프론트엔드 데브코스
  • 백준 14891
  • SWEA 파이썬
  • 코딩부트캠프
  • 프로그래머스 데브코스
  • javascript ux

최근 댓글

최근 글

hELLO · Designed By 정상우.
hellosonic
🥇[백준] 7569 토마토 (골드5) / BFS, 3차원 리스트
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.