토마토

2023. 2. 8. 22:21· 자료구조 & 알고리즘 관련/코딩테스트

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

 

7569번: 토마토

첫 줄에는 상자의 크기를 나타내는 두 정수 M,N과 쌓아올려지는 상자의 수를 나타내는 H가 주어진다. M은 상자의 가로 칸의 수, N은 상자의 세로 칸의 수를 나타낸다. 단, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100,

www.acmicpc.net

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

 

7576번: 토마토

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

www.acmicpc.net

from collections import deque
import sys


def bfs():
    # 토마토 queue 사용
    q = deque()
    cnt = 0
    visited = [[0] * N for _ in range(M)]
    for m in range(M):
        for n in range(N):
            if arr[m][n] == 1:
                q.append((m, n))
                visited[m][n] = 1
            elif arr[m][n] == 0:
                cnt += 1

    while q:
        cm, cn = q.popleft()
        for i, j in ((0, 1), (0, -1), (1, 0), (-1, 0)):
            rm, rn = i + cm, j + cn
            if 0 <= rm < M and 0 <= rn < N and arr[rm][rn] == 0:
                if visited[rm][rn] == 0:
                    q.append((rm, rn))
                    visited[rm][rn] = visited[cm][cn] + 1
                    cnt -= 1

    if cnt == 0:
        return visited[cm][cn] - 1
    else:
        return -1


N, M = map(int, sys.stdin.readline().split())

arr = list()

for i in range(M):
    arr.append(list(map(int, sys.stdin.readline().split())))
print(bfs())
import sys
from collections import deque

def bfs():
    q = deque()
    v = [[[0] * M for _ in range(N)] for _ in range(H)]
    cnt = 0
    for h in range(H):
        for n in range(N):
            for m in range(M):
                if arr[h][n][m] == 1:
                    q.append((h, n, m))
                    v[h][n][m] = 1
                elif arr[h][n][m] == 0:
                    cnt += 1

    while q:
        ch, cn, cm = q.popleft()

        for h, n, m in ((0, 1, 0), (0, 0, 1), (0, -1, 0), (0, 0, -1), (1, 0, 0), (-1, 0, 0)):
            rh, rn, rm = ch + h, cn + n, cm + m

            if 0 <= rh < H and 0 <= rn < N and 0 <= rm < M and arr[rh][rn][rm] == 0 and v[rh][rn][rm] == 0:
                q.append((rh, rn, rm))
                v[rh][rn][rm] = v[ch][cn][cm] + 1
                cnt -= 1

    if cnt == 0:
        return v[ch][cn][cm] - 1
    else:
        return -1


M, N, H = map(int, sys.stdin.readline().split())

arr = [[list(map(int, input().split())) for _ in range(N)] for _ in range(H)]

ans = bfs()

print(ans)

'자료구조 & 알고리즘 관련 > 코딩테스트' 카테고리의 다른 글

가장 큰 수  (0) 2023.03.23
나이트의 이동  (0) 2023.02.07
숨바꼭질  (0) 2023.02.07
단지번호붙이기  (0) 2023.02.05
바이러스  (0) 2023.02.05
'자료구조 & 알고리즘 관련/코딩테스트' 카테고리의 다른 글
  • 가장 큰 수
  • 나이트의 이동
  • 숨바꼭질
  • 단지번호붙이기
솜사탕코튼
솜사탕코튼
솜사탕코튼
개발일기
솜사탕코튼
전체
오늘
어제
  • 분류 전체보기 (236)
    • Spring관련 기술 (43)
      • Spring (2)
      • 서버개발 (10)
      • JPA (9)
      • 테스트코드 (22)
      • 인증, 인가 (0)
    • DB관련 (19)
      • 오라클 (1)
      • MySQL (0)
      • 기타 DB (4)
      • DB관련 이슈 (2)
      • REDIS (11)
      • db migration (1)
    • 프로그래밍 언어 (3)
      • 자바 (3)
    • 파이썬 관련 (19)
      • 파이썬 (16)
      • 데이터 사이언스 (3)
    • 네트워크 관련 (4)
      • 네트워크 (4)
    • 배포관련 (32)
      • AWS (26)
      • 도커 (5)
      • 클라우드 정리 (1)
    • 자료구조 & 알고리즘 관련 (53)
      • 자료구조&알고리즘 (6)
      • 코딩테스트 (40)
      • 99클럽 코딩테스트 스터디 6기 (7)
    • CS지식들 (30)
      • 공부공부 (13)
      • CS (17)
    • 프로젝트 (4)
    • 에러일기 (18)
    • 서적 (3)
      • 밑바닥부터 만드는 컴퓨팅 시스템 (3)
    • 깃 & 깃헙 (1)
    • 디자인패턴 (4)
    • 면접질문 (0)
    • kt-aivle (0)
    • 덕질일지 (2)
    • 영어공부 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 인프런
  • 파이썬
  • 백준
  • dfs
  • 99클럽
  • 코테
  • 그래프순회
  • 자바
  • 따라하며 배우는 AWS
  • BFS
  • 나동빈
  • 프로그래머스
  • queryDSL
  • AWS
  • 이것이 코딩테스트다
  • 스프링 부트 - 핵심 원리와 활용
  • Redis
  • 10주 완성 알고리즘 코딩테스트
  • Practical Testing: 실용적인 테스트 가이드
  • 따라하며 배우는 AWS 네트워크 입문

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
솜사탕코튼
토마토
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.