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

 

7569번: 토마토

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

www.acmicpc.net


내 풀이

 

import sys
from collections import deque as dq

input = sys.stdin.readline

def solution():
    M,N,H = map(int,input().split())

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

    dx = [1,-1,0,0,0,0]
    dy = [0,0,1,-1,0,0]
    dz = [0,0,0,0,1,-1]
    q = dq()
    def bfs():
        
        while q:
            z,x,y= q.popleft()
            for i in range(6):
                nx = x + dx[i]
                ny = y + dy[i]
                nz = z + dz[i]
                if 0<=nx <N and 0<=ny <M and 0<=nz <H:
                    if maps[nz][nx][ny] == 0 :
                        maps[nz][nx][ny] = maps[z][x][y] + 1
                        q.append((nz,nx,ny))

    for i in range(H):
        for j in range(N):
            for k in range(M):
                if maps[i][j][k] == 1:
                    q.append((i,j,k))

    bfs()
    check = 0
    days = -2
    for i in range(H):
        for j in range(N):
            for k in range(M):
                if maps[i][j][k] == 0:
                    check =1

                days = max(days,maps[i][j][k])

    if check ==1:
        print(-1) 
    elif days ==-1:
        print(0)
    else:
        print(days-1)



solution()

7576 번의 확장버전이다. 처음으로 z축이 붙은 문제를 풀어봤는데, 접근 자체는 같게 하면됐다. 


다른사람의 풀이

 



 

'취준 > 백준' 카테고리의 다른 글

16928 - 파이썬  (0) 2022.08.01
1504 - 파이썬  (0) 2022.07.27
7576 - 파이썬  (0) 2022.07.14
2606 - 파이썬  (0) 2022.07.13
24445 - 파이썬  (0) 2022.07.11

 

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

 

7576번: 토마토

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

www.acmicpc.net


내 풀이

 

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

def solution():
    m,n = map(int,input().split())
    graph = [list(map(int,input().split())) for _ in range(n) ]

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

    def bfs():
        q = deque()
        for i in range(n):
            for j in range(m):
                if graph[i][j]==1:
                    q.append([i,j])
        while q:
            x,y = q.popleft()
            for i in range(4):
                nx = x + dx[i]
                ny = y+ dy[i]

                if 0<=nx<n and 0<=ny <m:
                    if graph[nx][ny] == 0:
                        q.append((nx,ny))
                        graph[nx][ny] = graph[x][y] + 1
    bfs()
    left_over = False
    max_days = -1
    for i in range(n):
        for j in range(m):
            if graph[i][j]==0:
                left_over = True
            max_days = max(max_days,graph[i][j])
    if left_over:
        print(-1)
    else:
        print(max_days-1)        

solution()

많이들 그랬을꺼같은데 N,M 가(로세로) 생각을 잘 해야한다. 아무생각없이 하면 틀린다.


다른사람의 풀이

 



 

'취준 > 백준' 카테고리의 다른 글

1504 - 파이썬  (0) 2022.07.27
7569 - 파이썬  (0) 2022.07.26
2606 - 파이썬  (0) 2022.07.13
24445 - 파이썬  (0) 2022.07.11
24479 - 파이썬  (0) 2022.07.11

+ Recent posts