๋ฐฑ์ค€ 7569 ํŒŒ์ด์ฌ

2022. 1. 26. 11:44ใ†๐Ÿ”ฑ Algorithm/BFS DFS

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

 

7569๋ฒˆ: ํ† ๋งˆํ† 

์ฒซ ์ค„์—๋Š” ์ƒ์ž์˜ ํฌ๊ธฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋‘ ์ •์ˆ˜ M,N๊ณผ ์Œ“์•„์˜ฌ๋ ค์ง€๋Š” ์ƒ์ž์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” H๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. M์€ ์ƒ์ž์˜ ๊ฐ€๋กœ ์นธ์˜ ์ˆ˜, N์€ ์ƒ์ž์˜ ์„ธ๋กœ ์นธ์˜ ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋‹จ, 2 ≤ M ≤ 100, 2 ≤ N ≤ 100,

www.acmicpc.net

 

 

์ •๋‹ต ์ฝ”๋“œ

from collections import deque
from itertools import chain
from sys import stdin


M, N, H = map(int, stdin.readline().split())
board = []
queue = deque()

for h in range(H):
    temp = []
    for n in range(N):
        temp.append(list(map(int, stdin.readline().split())))
        for m in range(M):
            if temp[n][m] == 1:
                queue.append((h, n, m))
    board.append(temp)


dh = [0, 0, 0, 0, 1, -1]
dc = [0, 0, 1, -1, 0, 0]
dr = [1, -1, 0, 0, 0, 0]
while queue:
    h, r, c = queue.popleft()
    for i in range(6):
        nh = h + dh[i]
        nr = r + dr[i]
        nc = c + dc[i]
        if nh < 0 or nh >= H or nc < 0 or nc >= M or nr < 0 or nr >= N:
            continue
        if board[nh][nr][nc] == 0:
            queue.append((nh, nr, nc))
            board[nh][nr][nc] = board[h][r][c] + 1
            
answer = 1
for b in board:
    for c in chain(b):
        if 0 in c:
            print(-1)
            exit()
        else:
            answer = max(max(c), answer)

print(answer - 1)

 

์ ‘๊ทผ

์šฐ์„  ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์€ ์นธ์˜ ๋ชจ๋“  ํ† ๋งˆํ† ๊ฐ€ ์ต์„ ๋•Œ๊นŒ์ง€์˜ ์ตœ์†Œ ๋‚ ์งœ ๋‹ค.

๊ทธ ์ค‘ ์ต์ง€ ๋ชปํ•˜๋Š” ์นธ์ด ์žˆ๋‹ค๋ฉด -1 ์„ ๋ฆฌํ„ดํ•˜๋ฉด ๋œ๋‹ค. ๊ทธ๋ž˜์„œ  ์ฒ˜์Œ์—” 0์ธ ์นธ์„ ์ฐจ๋ก€๋Œ€๋กœ 1๋กœ ๋งŒ๋“ค๋ ค๊ณ  ํ–ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ๋ฌธ์ œ์ ์€ ์–ด๋–ค ์นธ์ด, ๋ช‡์ผ ์งธ์— 1์ด ๋๋Š”์ง€ ํŒ๋ณ„ ํ• ์ˆ˜ ์—†๋‹ค๋Š” ์ ์ด๋‹ค. 

๊ทธ๋Ÿผ ์–ด๋–ป๊ฒŒ ํ•ด์•ผํ• ๊นŒ? ์ธ์ ‘ํ•œ ์นธ(0์ธ ์ง€์ )์„ 1๋กœ ๋ฐ”๊พธ๋Š” ๋Œ€์‹ , ์ธ์ ‘ ์›์†Œ์˜ ๊ฐ’์— +1์„ ํ•˜์—ฌ ๊ฐ’์„ ๋ถ€์—ฌํ•˜๋ฉด ๋œ๋‹ค.

 

ํŠน์ด์ 

์ด ๋ฌธ์ œ๋Š” 3์ฐจ์›์„ ๋‹ค๋ฃฌ๋‹ค. (3์ฐจ ๋ฐฐ์—ด) ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— -1์„ ์ถœ๋ ฅํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์„ ๊ฒ€์ฆํ•˜๋ ค๋ฉด for ๋ฌธ์„ 3๋ฒˆ ๋Œ๋ ค์•ผํ•˜๋Š”๋ฐ, ๊ฐœ์ธ์ ์œผ๋กœ ๋ฐ˜๋ณต๋ฌธ์„ 3๋ฒˆ์ด๋‚˜ ์‚ฌ์šฉํ•˜๋Š”๊ฑด ๊น”๋”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•˜์—ฌ itertools ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ chain() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค. chain() ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด 2์ฐจ ๋ฐฐ์—ด ๊ตฌ์กฐ๋ฅผ 1์ฐจ ๋ฐฐ์—ด๋กœ flatten ์‹œํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ด์ค‘ for ๋ฌธ์œผ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ๊ฒ€์ฆ์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.