[백준] 7576번: 토마토 (python)

2024. 7. 16. 19:45·Study/algorithm
728x90
반응형

https://www.acmicpc.net/problem/7576


상하좌우의 토마트를 익힌다는 말을 보고 BFS를 떠올렸다.

하지만 1. 날짜를 어떻게 카운트할 것인가, 2. 모든 토마토를 익히지 못하는 경우를 어떻게 알것인가

이 두가지를 해결하지 못해서 찾아봤다.

아이디어는 간단했다. 주변 토마토를 익히면 해당 위치의 값을 이전 위치의 값에 +1을 해주면 된다.

이후 마지막에 순회하며 가장 큰 값을 찾은 뒤 -1을 하면 최종 걸리는 날짜를 구할 수 있다.

또한 순회 중 익지 않은 토마토를 찾게 되면 -1을 출력하면 되는 간단한 생각이었다.


from collections import deque

m, n = map(int, input().split())
tomato = []
q = deque()
for i in range(n):
    t = list(map(int, input().split()))
    tomato.append(t)
    for j in range(m):
    	# 순회하며 익은 토마토를 미리 큐에 저장
        if t[j] == 1:
           q.append((i, j)) 

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

def bfs():
    while q:
        x, y = q.popleft()
        
        # 상하좌우 확인
        for i in range(4):
            nx, ny = x + dx[i], y + dy[i]
            if (0 <= nx < n) and (0 <= ny < m):
            	# 만약 익지 않은 토마토가 있다면 기존의 익은 토마토 위치의 숫자에 +1을 한뒤 저장
                # 큐에 해당 위치 저장
                if tomato[nx][ny] == 0:
                    tomato[nx][ny] = tomato[x][y] + 1
                    q.append((nx, ny))

bfs()

max_num = 0
for i in range(n):
    for j in range(m):
    	# 만약 익지 않은 토마토가 있는 경우 -1를 출력하고 종료
        if tomato[i][j] == 0:
            print(-1)
            exit()
        # 익은 토마토의 숫자가 제일 큰 것을 찾기
        if tomato[i][j] > max_num:
            max_num = tomato[i][j]
# 1에서부터 카운트가 되었기 때문에 -1 을 하여 최종 정답 출력
print(max_num - 1)
728x90
반응형

'Study > algorithm' 카테고리의 다른 글

[백준] 10971번: 외판원 순회 2 (python)  (0) 2024.07.15
[백준] 2468번: 안전 영역 (python)  (0) 2024.07.15
[백준] 11057번: 오르막 수 (python)  (0) 2024.07.14
[백준] 11726번: 2×n 타일링 (python)  (0) 2024.07.11
[백준] 1463번: 1로 만들기 (python)  (0) 2024.07.11
'Study/algorithm' 카테고리의 다른 글
  • [백준] 10971번: 외판원 순회 2 (python)
  • [백준] 2468번: 안전 영역 (python)
  • [백준] 11057번: 오르막 수 (python)
  • [백준] 11726번: 2×n 타일링 (python)
성장형감자
성장형감자
공부 기록
    반응형
  • 성장형감자
    단순하게
    성장형감자
  • 전체
    오늘
    어제
    • Category (66)
      • Paper review (38)
        • 2D Object detection (11)
        • 3D Object detection (20)
        • 2D Segmentation (1)
        • 2D Classification (5)
        • 3D classification (1)
      • Programming (4)
        • Python (1)
        • Linux (3)
      • Project (0)
      • Study (24)
        • algorithm (20)
        • etc. (1)
        • Radar (3)
  • 인기 글

  • 블로그 메뉴

    • 홈
  • 250x250
  • hELLO· Designed By정상우.v4.10.0
성장형감자
[백준] 7576번: 토마토 (python)
상단으로

티스토리툴바