관리 메뉴

즐겁게, 코드

BOJ 17086번 - 아기 상어 2 본문

💯 알고리즘/백준 온라인 저지

BOJ 17086번 - 아기 상어 2

Chamming2 2021. 5. 28. 22:57

[백준 온라인 저지 링크]

 

17086번: 아기 상어 2

첫째 줄에 공간의 크기 N과 M(2 ≤ N, M ≤ 50)이 주어진다. 둘째 줄부터 N개의 줄에 공간의 상태가 주어지며, 0은 빈 칸, 1은 아기 상어가 있는 칸이다. 빈 칸의 개수가 한 개 이상인 입력만 주어진다.

www.acmicpc.net

 

[정답 코드 - Python]

from collections import deque
N, M = map(int, input().split())
max_cnt = 0
queue = deque()
board = []

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

for i in range(N):
    board.append(list(map(int, input().split())))


def BFS(q):
    while q:
        y, x = q.popleft()
        for i in range(8):
            ny = y + dy[i]
            nx = x + dx[i]
            if 0 <= ny < N and 0 <= nx < M:
                // 다음 칸이 0이 아니라면, 이미 다른 상어(출발점)에서 밟은 공간이라는 의미입니다.
                if board[ny][nx] == 0:
                    board[ny][nx] = board[y][x] + 1
                    q.append((ny, nx))


for row in range(N):
    for col in range(M):
        if board[row][col] == 1:
            queue.append((row, col))


// 상어가 있는 지점을 큐에 한번에 집어넣습니다.
// 이러면 각 상어가 있는 지점들로부터 1씩 뻗어나가게 되어, 따로 방문 여부 처리를 해주지 않아도 됩니다!
BFS(queue)

// 최대 거리 계산
for row in range(N):
    for col in range(M):
        if board[row][col] >= max_cnt:
            max_cnt = board[row][col]

print(max_cnt - 1)

 

반응형

'💯 알고리즘 > 백준 온라인 저지' 카테고리의 다른 글

백준 10026번 : 적록색약  (2) 2021.06.03
백준 4963번 : 섬의 개수  (0) 2021.05.30
BOJ 1325번 - 효율적인 해킹  (0) 2021.05.26
BOJ 2583번 - 영역 구하기  (0) 2021.04.29
BOJ 2606번 - 바이러스  (0) 2021.04.27
Comments
소소한 팁 : 광고를 눌러주시면, 제가 뮤지컬을 마음껏 보러다닐 수 있어요!
와!! 바로 눌러야겠네요! 😆