[Baekjoon] 2589. 보물섬 [G5]
📚 문제
https://www.acmicpc.net/problem/2589
📖 풀이
최단 거리를 구하는 문제로 BFS탐색을 활용한다.
모든 육지의 위치에서 BFS 탐색을 하며, BFS로 이동 거리가 가장 먼 거리를 출력한다.
size로 같은 거리의 정점들을 순회하며 다음 거리의 정점들과 구별을 해준다.
순회가 끝나면 거리를 1씩 더한다. 그리고 다음 거리의 정점들을 다시 순회한다.
📒 코드
from collections import deque
def in_range(x, y): # 범위 안에 속하는지 확인할 함수
return 0 <= x < n and 0 <= y < m
def bfs(x, y):
visited = [[0] * m for _ in range(n)]
que = deque()
que.append((x, y))
visited[x][y] = 1
d = -1
while que:
size = len(que) # 같은 이동거리의 정점들을 묶을 size
for _ in range(size): # 같은 이동 거리의 정점들을 순회
x, y = que.popleft()
for nxt in range(4): # 네 방향 탐색
nx = x + dx[nxt]
ny = y + dy[nxt]
# 범위를 초과하거나, 방문했거나, 바다인 경우는 continue
if not in_range(nx, ny) or visited[nx][ny] or arr[nx][ny] == 'W':
continue
visited[nx][ny] = 1
que.append((nx, ny))
d += 1 # 이동 거리
return d
dx = [0, 1, 0, -1] # 우 하 좌 상
dy = [1, 0, -1, 0]
n, m = map(int, input().split())
arr = [input() for _ in range(n)]
max_d = 0 # 출력할 최대 거리 초기화
for i in range(n): # 모든 육지의 위치에서 완전 탐색
for j in range(m):
if arr[i][j] == 'W': # 바다인 경우 continue
continue
max_d = max(max_d, bfs(i, j)) # 최대 거리를 구한다.
print(max_d)
🔍 결과
Author And Source
이 문제에 관하여([Baekjoon] 2589. 보물섬 [G5]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yunhlim/Baekjoon-2589.-보물섬-G5저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)