๋ค์ฐจ์ ๋ฐฐ์ด์์ ๊ฐ ์นธ์ ๋ฐฉ๋ฌธํ ๋ ๋๋น๋ฅผ ์ฐ์ ์ผ๋ก ๋ฐฉ๋ฌธํ๋ ์๊ณ ๋ฆฌ์ฆ
๊ทธ๋ํ ์๋ฃ๊ตฌ์กฐ์์ ๋ชจ๋ ๋
ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ธฐ ์ํด ๋ง๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.

์ ์ (๋
ธ๋)์ ๊ฐ์ (์ฃ์ง)๋ก ๊ตฌ์ฑ๋ ์๋ฃ๊ตฌ์กฐ ์ด๋ค.

์ขํ๋ฅผ ๋ฐฉ๋ฌธํ๋ฉด ํ์๋ฅผ ๋จ๊ธฐ๊ณ ํ์ ๋ฃ๋๋ค. ํ๊ฐ ๋น ๋๊น์ง ํ์ front๋ฅผ ๋นผ๊ณ ์ขํ์ ์ํ์ข์ฐ๋ฅผ ์ดํด๋ณด๋ฉฐ ํ์ ๋ฃ์ด์ฃผ๋ ์์
์ ๋ฐ๋ณตํ๋ค.

(0,0)์์ ์ํ์ข์ฐ์ ํ๋์ ์นธ์ ํ์ธํ์ฌ (0,1)๊ณผ (1,0)์ ํ์ ๋ฃ๋๋ค.
(0,1)์ ํ์์ popํด ์ํ์ข์ฐ๋ฅผ ํ์ธํ๋ฉด (0,2)๋ง ํ๋์์ด๋ฉฐ ๋ฐฉ๋ฌธํ์ง ์์์ผ๋ ๋ฐฉ๋ฌธ ํ์๋ฅผ ๋จ๊ธฐ๊ณ ํ์ ๋ฃ๋๋ค.

์ด๋ฐ ์์ผ๋ก ํ์ front๋ฅผ pop์ํค๋ฉฐ ๋ฐฉ๋ฌธ ํ์๋ฅผ ํ๋ค.
from collections import deque
import sys
N, M = map(int, sys.stdin.readline().split())
mat = [
[0, 1, 1, 1, 1, 1],
[0, 1, 0, 0, 0, 1],
[0, 1, 0, 1, 0, 1],
[0, 1, 0, 1, 0, 0],
[0, 0, 0, 1, 1, 0],
[1, 1, 1, 1, 1, 0]
]
# for _ in range(N):
# row = list(map(int, input().split()))
# mat.append(row)
print(mat)
def bfs(y,x): # ์ขํ์ ํ๊ณผ ์ด์ x,y๋ฅผ ๋ฐ๋๋ก ๋ฃ์ด์ผํ๋ค.
visited=[[False]*M for _ in range(N)]
dx=[-1,0,0,1] #์ด
dy=[0,1,-1,0] #ํ
visited[y][x]=True
queue=deque()
queue.append([y,x])
while queue:
loc=queue.popleft()
print(loc[0],loc[1])
for i in range(4):
ny=loc[0]+dy[i] #ํ ์ขํ ๊ณ์ฐ
nx=loc[1]+dx[i] #์ด ์ขํ ๊ณ์ฐ
if (ny <0) or (ny>=N) or (nx<0) or( nx>=M):
continue
if mat[ny][nx]==1:
continue
if not visited[ny][nx]:
visited[ny][nx]=True
queue.append([ny,nx])
bfs(0,0)
from collections import deque
import sys
n,m=map(int,sys.stdin.readline().split())
pic=[]
for _ in range(n):
row=list(map(int,sys.stdin.readline().split()))
pic.append(row)
visited=[[False]*m for _ in range(n)]
def bfs(visited,y,x):
temp=0
dx=[-1,0,0,1] #์ด ์ข์ํ์ฐ
dy=[0,1,-1,0] #ํ ์ข์ํ์ฐ
visited[y][x]=True
que=deque()
que.append([y,x])
while que:
value=que.popleft()
temp+=1
for i in range(4):
ny=dy[i]+value[0]
nx=dx[i]+value[1]
if nx<0 or nx>=m or ny<0 or ny>=n: #์ขํ๊ฐ ๋ฒ์ด๋๋ฉด
continue
if pic[ny][nx]==0:
continue
if not visited[ny][nx]: #๋ฐฉ๋ฌธ์ํ ๊ทธ๋ฆผ์ ๋ฐฉ๋ฌธํ๋ฉด
visited[ny][nx]=True #ํด๋น ๊ทธ๋ฆผ์ ๋ฐฉ๋ฌธ์ผ๋ก ๋ฐ๊พธ๊ณ
que.append([ny,nx]) # ํ์ ๋ฃ๋๋ค.
return temp
res=[]
for i in range (n):
for j in range(m):
if pic[i][j]==1 and visited[i][j]==False: #๊ทธ๋ฆผ์ด๋ฉฐ ๋ฐฉ๋ฌธํ์ ์ด ์์ ๋ bfs ์์
res.append(bfs(visited,i,j))
print(len(res))
if len(res)==0:
print(0)
else:
print(max(res))
from collections import deque
import sys
n,m=map(int,sys.stdin.readline().split())
path=[]
for _ in range(n):
row=list(map(int,input()))
path.append(row)
dist=[[0]*m for _ in range(n)]
def dfs(dist,y,x):
dx=[-1,0,0,1]
dy=[0,-1,1,0]
que=deque()
que.append([y,x])
dist[y][x]=1
while que:
next=que.popleft()
for i in range(4):
ny=dy[i]+next[0]
nx=dx[i]+next[1]
if nx<0 or ny<0 or ny>=n or nx>=m:
continue
if path[ny][nx]==0:
continue
if dist[ny][nx]==0: #์์ง ๋ฐฉ๋ฌธ์ํ, ๊ฑฐ๋ฆฌ๊ฐ 0์ผ๋ก ํ์๋ ์ง์ ์ ๋ฐฉ๋ฌธ
que.append([ny,nx]) # ํ์ ์ขํ ๋ฃ๊ณ
dist[ny][nx]=dist[next[0]][next[1]]+1 #๊ฑฐ๋ฆฌ๋ฅผ ํ๋์ฉ ์ฌ๋ฆฌ๊ธฐ
dfs(dist,0,0)
print(dist[n-1][m-1])
BFS๋ก ํ์ ์๋ ๋ฌธ์ ๋ ๋ชจ๋ ๋น์ทํด ๋ณด์ธ๋ค.
์ต์ ํ ๋งํ ๊ฐ ์ฌ๋ฌ๊ฐ๋ฉด ์๊ฐ์ด ์ผ๋ง๋ ๊ฑธ๋ฆด ๊ฒ์ธ๊ฐ?
์์์ ์ด ์ฌ๋ฌ ๊ฐ์ธ BFS๋ฅผ ๋์์ ๋ ์ ์์ด์ผํ๋ค.
-> ์ฌ๋ฌ ์์ ์ ์ ๋์์ ํ์ ๋ฃ๊ณ BFS๋ฅผ ๋๋ ค๋ฒ๋ฆฌ๋ฉด ๋๋ค.
from collections import deque
import sys
n,m=map(int,sys.stdin.readline().split())
tomato=[]
for _ in range(m):
row=list(map(int,sys.stdin.readline().split()))
tomato.append(row)
day=[[0]*n for _ in range(m)]
que=deque()
for i in range(m):
for j in range(n):
if tomato[i][j]==0:
day[i][j]=-1
elif tomato[i][j]==1: # ์ต์ ํ ๋งํ ๋ฅผ ๋ชจ๋ que์ ๋ฃ๊ณ ์์ํ๋ค.
que.append([i,j])
while que:
dx=[-1,0,0,1]
dy=[0,1,-1,0]
value=que.popleft()
for i in range(4):
ny=value[0]+dy[i]
nx=value[1]+dx[i]
if nx<0 or ny<0 or ny>=m or nx>=n:
continue
if day[ny][nx]>=0:
continue
day[ny][nx]=day[value[0]][value[1]]+1
que.append([ny,nx])
ans=0
for i in range(m):
for j in range(n):
ans=max(ans,day[i][j])
for i in range(m):
for j in range(n):
if day[i][j]== -1:
ans=-1
print(ans)