728x90
import sys
from collections import deque
input = sys.stdin.readline
# 10%에서 메모리 초과 -> check 함수 내의 리스트 길이 때문인 것 같음.
# 리스트에 넣는 것이 아닌 선언된 리스트를 이용해서 해결하는 방법을 알게 됌.
# 각 섬을 2~n+1 까지의 숫자로 채우기
def bfs(k,index,x,y):
# 시작 위치 x,y
queue = deque()
queue.append([x,y])
dx = [1,-1,0,0]
dy = [0,0,1,-1]
while queue:
a,b = queue.popleft()
k[a][b] = index
for i in range(4):
temp_x = a + dx[i]
temp_y = b + dy[i]
if 0<=temp_x<len(k) and 0<=temp_y<len(k) and k[temp_x][temp_y] == 1:
queue.append([temp_x,temp_y])
# BFS 돌면서 최단 값 찾기
def check(k,i,j):
count = 0
queue = deque()
queue.append([i,j])
dx = [1,-1,0,0]
dy = [0,0,1,-1]
compare = k[i][j]
temp = [ ]
while queue:
a,b = queue.popleft()
for i in range(4):
temp_x = a + dx[i]
temp_y = b + dy[i]
if 0<=temp_x<len(k) and 0<=temp_y<len(k):
# 다른 섬을 만났을 때
if k[temp_x][temp_y]!=0 and k[temp_x][temp_y]!=compare:
return count
else:
# 이 부분이 문제
if k[temp_x][temp_y]==0:
temp.append([temp_x,temp_y])
if len(queue) == 0:
queue = deque(temp)
count += 1
temp = [ ]
return 1000000
# 0은 바다, 1은 육지
n = int(input())
k = [ ]
for i in range(n):
k.append(list(map(int,input().split(" "))))
index = 2
for i in range(0,len(k)):
for j in range(0,len(k)):
if k[i][j] == 1:
bfs(k,index,i,j)
index+=1
# 각 섬의 모든 구간에서 다른 섬의 최솟값 구하기
answer = 1000000
for i in range(0,len(k)):
for j in range(0,len(k)):
if k[i][j] != 0:
answer= min((check(k,i,j),answer))
print(answer)
'''
check 함수 정답 코드
def bfs2(z):
global answer
dist = [[-1] * n for _ in range(n)] # 거리가 저장될 배열
q = deque()
for i in range(n):
for j in range(n):
if arr[i][j] == z:
q.append([i, j])
dist[i][j] = 0
while q:
x, y = q.popleft()
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
# 갈 수 없는 곳이면 continue
if nx < 0 or nx >= n or ny < 0 or ny >= n:
continue
# 다른 땅을 만나면 기존 답과 비교하여 짧은 거리 선택
if arr[nx][ny] > 0 and arr[nx][ny] != z:
answer = min(answer, dist[x][y])
return
# 바다를 만나면 dist를 1씩 늘린다.
if arr[nx][ny] == 0 and dist[nx][ny] == -1:
dist[nx][ny] = dist[x][y] + 1
q.append([nx, ny])
'''
728x90
'🟢 알고리즘 문제 풀이 > Baekjoon' 카테고리의 다른 글
| [파이썬] 백준 1932 정수 삼각형 (0) | 2023.08.09 |
|---|---|
| [파이썬] 백준 11722 가장 긴 감소하는 부분 수열 (0) | 2023.08.09 |
| [파이썬] 백준 11053 RGB 거리 (0) | 2023.07.28 |
| [파이썬] 백준 2193 이친수 (0) | 2023.07.27 |
| [파이썬] 백준 1697 숨바꼭질 (0) | 2023.07.06 |