Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- error
- 알고리즘
- UIKit
- dfs
- 알고리즘 공부
- 앱개발
- 파이썬
- swift
- 백준온라인저지
- Algorithm
- greedy algorithm
- Swift공부
- Android
- ios
- 백준 온라인 저지
- SwiftUI
- Level 1
- Clean Architecture
- iOS개발
- 공부
- Autolayout
- 프로그래머스
- 정렬
- Python
- 그리디 알고리즘
- 안드로이드 공부
- 파이썬 풀이
- 오토레이아웃
- BFS
- Kotlin
Archives
- Today
- Total
Tori의 개발 공부
[python] 7569번 - 토마토 본문
문제
파이썬 풀이
해당 문제는 이전 문제인 7576토마토 문제가 3차원으로 변형된 문제이다.
2차원 탐색이였을 때 가졌던 이동 변수인 dx, dy에 dz를 추가하여 좌, 우, 앞, 뒤, 위, 6가지 이동을 할 수 있도록 해주면 될 것 같다.
3차원 탐색 BFS
dx = [-1, 1, 0, 0, 0, 0]
dy = [0, 0, -1, 1, 0, 0]
dz = [0, 0, 0, 0, -1, 1]
def bfs() :
while q :
x, y, z = q.popleft()
for i in range(6) :
nx = x + dx[i]
ny = y + dy[i]
nz = z + dz[i]
if nx < 0 or nx >= n or ny < 0 or ny >= m or nz < 0 or nz >= h :
continue
if matrix[nz][nx][ny] == -1 :
continue
if matrix[nz][nx][ny] == 0 :
matrix[nz][nx][ny] = matrix[z][x][y] + 1
q.append((nx,ny,nz))
좌, 우, 앞, 뒤, 위, 아래 6가지 이동을 하기 위해 이동 변수의 길이도 6이 되었고, z축 이동을 위한 dz 변수도 추가해주었다.
이동 변수들과 이동 for문이 리스트 길이에 맞춰6이 된점, matrix가 3차원인 것만 빼면 이전 문제와 동일하다.
기본적인 로직에 대한 설명은 이전 문제와 동일하다.
이전 문제 풀이 : https://bang-tori.tistory.com/24
[python] 7576번 - 토마토
문제 파이썬 풀이 최소 날짜를 구하기 위해서 BFS를 사용하고, 탐색을 할 때마다 이전 탐색 지점 + 1을 값으로 저장해주어 날짜를 저장해준다. 즉 마지막에 탐색하는 칸에는 가장 큰 값이 들어 있
bang-tori.tistory.com
전체 코드
from collections import deque
import sys
input = sys.stdin.readline
dx = [-1, 1, 0, 0, 0, 0]
dy = [0, 0, -1, 1, 0, 0]
dz = [0, 0, 0, 0, -1, 1]
m, n, h = map(int, input().rstrip().split())
matrix = [[list(map(int, input().rstrip().split())) for _ in range(n)] for _ in range(h)]
q = deque()
def bfs() :
while q :
x, y, z = q.popleft()
for i in range(6) :
nx = x + dx[i]
ny = y + dy[i]
nz = z + dz[i]
if nx < 0 or nx >= n or ny < 0 or ny >= m or nz < 0 or nz >= h :
continue
if matrix[nz][nx][ny] == -1 :
continue
if matrix[nz][nx][ny] == 0 :
matrix[nz][nx][ny] = matrix[z][x][y] + 1
q.append((nx,ny,nz))
for z in range(h) :
for i in range(n) :
for j in range(m) :
if matrix[z][i][j] == 1 :
q.append((i,j,z))
bfs()
for l2 in matrix :
for l in l2 :
if 0 in l :
print(-1)
sys.exit()
result = 0
for i in matrix :
for j in i :
list_max = max(j)
result = max(result, list_max)
print(result - 1)
이전 풀이와 조금 다른 점은 -1을 출력하는 부분에서 result에 값을 넣는 대신 출력을 하고 프로그램을 끝내도록 하였고,
max값을 찾는 부분을 map이 아닌 반복문을 통해 구현했다는 점이다.
'Algorithm > 백준 문제풀이' 카테고리의 다른 글
[python] 7562번 - 나이트의 이동 (0) | 2021.12.13 |
---|---|
[python] 1697번 - 숨바꼭질 (0) | 2021.12.13 |
[python] 7576번 - 토마토 (0) | 2021.12.12 |
[python] 2667번 - 단지번호붙이기 (0) | 2021.12.08 |
[python] 2606번 - 바이러스 (0) | 2021.12.07 |