728x90
https://www.acmicpc.net/problem/7569
- 생각
- 처음에는 토마토를 한 리스트에 받아와서 위 혹은 아래의 있는 토마토를 행번호에 +N or -N으로 하려 했으나 계속 오류남...
- 그래서 그냥 상자를 따로 리스트로 받아서 처리
- exit(0)
- for문 여러개인 경우 반복을 멈추고 싶을 때마다 함수로 만들어서 return 했는데 위 코드를 쓰면 코드 강제끝이 된다. 다만 밑에 남았을 경우 불가능
- 코드
from collections import deque
from sys import stdin
# 토마토 위, 아래, 왼쪽, 오른쪽, 앞, 뒤
# 가로 M, 세로 N, 높이 H
M,N,H = map(int,stdin.readline().split())
tomato = [[list(map(int,stdin.readline().rstrip().split())) for _ in range(N)] for __ in range(H)]
# 익은 토마토 위치
ripetomato = deque()
for h in range(H):
for r in range(N):
for c in range(M):
if tomato[h][r][c] == 1:
ripetomato.append([h,r,c])
# 토마토 익히기
while ripetomato:
ch,cr,cc = ripetomato.popleft()
# 우,하,좌,상,위,아래
for dh,dr,dc in [(0,0,1),(0,1,0),(0,0,-1),(0,-1,0),(1,0,0),(-1,0,0)]:
nh = ch + dh
nr = cr + dr
nc = cc + dc
# 상자 안에 있고 안 익은 토마토 -> 익히기
if 0 <= nh < H and 0 <= nr < N and 0 <= nc < M and tomato[nh][nr][nc] == 0:
tomato[nh][nr][nc] = tomato[ch][cr][cc] + 1
ripetomato.append([nh,nr,nc])
# 다 익었는가?
day = 0
for h in range(H):
for r in range(N):
day = max(day,max(tomato[h][r]))
# 덜 익은 토마토 1개라도 있다면 실패
if tomato[h][r].count(0):
print(-1)
exit(0)
# 익은 토마토 번호가 1로 시작해서
print(day-1)
728x90
반응형
'TIL - 프로그래밍 > Python 알고리즘' 카테고리의 다른 글
[프로그래머스] Lv.2 주차 요금 계산 - Python (0) | 2022.06.16 |
---|---|
[백준] 11404. 플로이드 - Python (0) | 2022.06.15 |
[백준] 7576. 토마토 - Python (0) | 2022.06.13 |
[백준] 1181. 단어 정렬 - Python (0) | 2022.06.13 |
[프로그래머스] Lv.1 크레인 인형뽑기 게임 (0) | 2022.06.13 |
댓글