[백준][파이썬] 7576번 토마토

2022. 2. 12. 10:50·Python/알고리즘 문제풀이

백준 온라인저지 7576번 토마토

문제풀러 바로가기👇👇👇👇👇👇

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

 

7576번: 토마토

첫 줄에는 상자의 크기를 나타내는 두 정수 M,N이 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M,N ≤ 1,000 이다. 둘째 줄부터는 하나의 상자에 저장된 토마토

www.acmicpc.net

 

 

 

 

 

문제풀이


1. 바이러스같이 퍼져가는 구조이므로 bfs를 사용해야한다.

 

2. 퍼져나가면서 1씩 증가시켜 기록하면 최대값을 통해 모두 익을 때까지의 최소 날짜를 알 수 있다.

 

3. dx, dy 배열을 이용해 사방에 있는 토마토들을 탐색하자.

 

4. 만약 bfs를 사용해서 탐색했는데도 0이 남아있다면 -1에 의해 가로막혀 있는 것이므로 토마토가 모두 익지 못하는 상황이다.

 

 

 

 

코드

from collections import deque
import sys
input = sys.stdin.readline

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

m, n = map(int, input().split())
graph = []
for i in range(n):
    graph.append(list(map(int, input().split())))

# 각각 퍼져나갈 수 있도록 큐에 익은 토마토 삽입
q = deque()
for i in range(n):
    for j in range(m):
        if graph[i][j] == 1:
            q.append((i, j))
            
# bfs
while q:
    x, y = q.popleft()

    for i in range(4):
        nx = x + dx[i]
        ny = y + dy[i]

        if nx < 0 or ny < 0 or nx >= n or ny >= m:
            continue

        if graph[nx][ny] == 0:
            graph[nx][ny] = graph[x][y] + 1
            q.append((nx, ny))

result = 0
for i in range(n):
    for j in range(m):
        if graph[i][j] == 0:
            print(-1)
            exit()
    result = max(result, max(graph[i]))
print(result-1)

 

 

Python3와 PyPy3의 차이

유형 메모리 시간 언어 코드 길이
수정본 + 언어 바꿈 170564KB 432 ms PyPy3 798 B
수정본(sys.stdin.readline 사용) 97864KB 2704ms Python3 798 B
초안 97924KB 2808ms Python3 768 B

두 언어의 시간 차이가 굉장히 많이 발생했다.

'Python/알고리즘 문제풀이' 카테고리의 다른 글
  • [백준][파이썬] 10816번 숫자 카드 2
  • [백준][파이썬] 18870번 좌표압축
  • [백준][파이썬] 9184번 신나는 함수 실행
  • [백준][파이썬] 1654번 랜선 자르기
gakko
gakko
좌충우돌 개발기
  • gakko
    MYVELOP 마이벨롭
    gakko
  • 전체
    오늘
    어제
    • 분류 전체보기 (203)
      • Spring (23)
        • Spring (10)
        • Spring Boot (7)
        • Spring Security (1)
        • Hibernate (4)
      • Test (3)
      • 끄적끄적 (6)
      • 활동 (35)
        • 부스트캠프 (23)
        • 동아리 (3)
        • 컨퍼런스 (3)
        • 글또 (5)
        • 오픈소스 컨트리뷰션 (1)
      • 디자인패턴 (0)
      • Git & GitHub (22)
        • Git (13)
        • Github Actions (1)
        • 오류해결 (5)
        • 기타(마크다운 등) (3)
      • 리눅스 (6)
        • 기초 (6)
        • 리눅스 서버 구축하기 (0)
      • Infra (2)
        • Docker (1)
        • Elastic Search (0)
        • Jenkins (1)
        • AWS (1)
      • MySQL (7)
        • 기초 (6)
        • Real MySQL (1)
      • 후기 (3)
        • Udemy 리뷰 (3)
      • CS (26)
        • 웹 기본지식 (0)
        • 자료구조 (13)
        • 운영체제 OS (12)
        • 데이터베이스 (1)
        • 시스템 프로그래밍 (0)
        • 기타 (0)
      • Tools (1)
        • 이클립스 (1)
        • IntelliJ (0)
      • 프로젝트 (1)
        • 모여모여(부스트캠프) (1)
      • JAVA (32)
        • Maven (6)
        • 오류해결 (11)
        • 자바 클래스&메소드 (1)
        • JSP & Servlet (12)
      • Javascript (5)
        • 기초 (3)
        • React (2)
      • Python (28)
        • 파이썬 함수 (9)
        • 알고리즘 문제풀이 (16)
        • 데이터 사이언스 (2)
        • 웹 크롤링 (1)
      • 단순정보전달글 저장소 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 우진님
  • 공지사항

  • 인기 글

  • 태그

    Spring
    java
    부스트캠프
    파이썬
    스프링부트
    jsp
    부스트캠프 7기
    스프링
    부스트캠프 멤버십
    MySQL
    Git
    알고리즘
    웹개발
    os
    Python
    오류해결
    자바
    자바스크립트
    GitHub
    운영체제
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
gakko
[백준][파이썬] 7576번 토마토
상단으로

티스토리툴바