728x90
문제
https://www.acmicpc.net/problem/7576
7576번: 토마토
첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토
www.acmicpc.net
# 2차원 + dfs(deque) -> 간단한 문제
# 필자는 토마토2(3차원 리스트를 이용하는 문제)를 먼저 풀었기 때문에 2차원 리스트만 사용하는 이 토마토 문제는 더 쉽게 느껴졌다.
정답
import sys
from collections import deque
input = sys.stdin.readline
m, n = map(int, input().split())
box = [list(map(int, input().split())) for _ in range(n)]
# 방향 지시(x,y -> 상, 하, 좌, 우)
dx = [-1, 1, 0, 0]
dy = [0, 0, -1, 1]
q = deque()
for i in range(n):
for j in range(m):
if box[i][j] == 1: # 맨 처음 익은 토마토 찾아서 q에 저장
q.append((i,j,0))
while q:
x, y, day = q.popleft()
for i in range(4): # 인접한 곳으로 이동
ddx = dx[i]+x
ddy = dy[i]+y
dday = day + 1
if 0<=ddx<n and 0<=ddy<m: # 지정 범위에 있고 익지 않은 토마토라면 익은 토마토로 바꾸고 큐에 저장
if box[ddx][ddy] == 0:
box[ddx][ddy] = 1
q.append((ddx,ddy,dday))
for v in range(n):
for l in range(m):
if box[v][l] == 0: # 하나라도 익지 않은 토마토가 있다면 -1 출력
day = -1
break
print(day)
* 궁금하신 분들은 아래 github로 오시면 감사하겠습니다
https://github.com/JunSeokCheon
JunSeokCheon - Overview
JunSeokCheon has 6 repositories available. Follow their code on GitHub.
github.com
'알고리즘 > baekjoon' 카테고리의 다른 글
[알고리즘/baekjoon] 5430_AC(python) (0) | 2021.11.30 |
---|---|
[알고리즘/baekjoon] 16928_뱀과 사다리 게임(python) (0) | 2021.11.30 |
[알고리즘/baekjoon] 7569_토마토2(python) (0) | 2021.11.27 |
[알고리즘/baekjoon] 6064_카잉 달력(python) (0) | 2021.11.27 |
[알고리즘/baekjoon] 2667_단지번호붙이기(python) (0) | 2021.11.26 |
댓글