โ 7576 ํ ๋งํ โ (์ต๋จ๊ฒฝ๋ก)
import sys
input=sys.stdin.readline
from collections import deque
M,N=map(int,input().split())
graph=[]
starts=[]
depths=[[0]*M for _ in range(N)]
visited=[[False]*M for _ in range(N)]
def BFS(graph, depths, starts, visited):
queue = deque(starts)
dx,dy=[0,0,-1,1],[-1,1,0,0]
while queue:
v = queue.popleft()
for i in range(4):
nx,ny=v[0]+dx[i],v[1]+dy[i]
if 0<=nx<N and 0<=ny<M:
if not visited[nx][ny] and graph[nx][ny] == 0:
graph[nx][ny] = 1
visited[nx][ny] = True
depths[nx][ny] = depths[v[0]][v[1]] + 1
queue.append((nx,ny))
for x1 in range(N):
l=list(map(int,input().split()))
graph.append(l)
x2=0
for y in l:
if y == 1:
starts.append((x1,x2))
visited[x1][x2] = True
x2+=1
BFS(graph, depths, starts, visited)
for x in range(N):
for y in range(M):
if graph[x][y] == 0:
print(-1)
sys.exit()
max_depth=-10_000_000
for x in range(N):
max_depth=max(max_depth,max(depths[x]))
print(max_depth)
โด๏ธ ์์ ๋ด์ ์ต์ ํ ๋งํ ๋ค์ด ๋์์ ์ํ์ข์ฐ ๋ฐฉํฅ์ผ๋ก ์ด๋ํ๋ฏ๋ก ์ค๋ฒ ์ต๋จ๊ฑฐ๋ฆฌ ๊ธฐ์กด ๋ฌธ์ (์์์ 1๊ฐ)์ ๋์ด๋ ์ฝ๊ฐ ์์น. ์์์ ์ด ์ฌ๋ฌ๊ฐ์ธ BFS ์ต๋จ๊ฑฐ๋ฆฌ ์ ํ: 1์ผ ๋์ (x,y)๋ฅผ starts list์ ๋ฃ์ด queue์ ๋ฃ๊ณ ์์
โด๏ธ ๊ทธ ์ธ) 0์ด ์๋ค๋ฉด -1 ์ถ๋ ฅํ๊ณ ๋ฐ๋ก ์ข ๋ฃ / ๊ทธ๊ฒ ์๋๋ผ๋ฉด max ๊ฐ 2์ฐจ์ ๋ฐฐ์ด ๋๋ ค์ ํ์ธ
โ 7569 ํ ๋งํ โ (3์ฐจ์ ์ต๋จ๊ฒฝ๋ก)
import sys
input=sys.stdin.readline
from collections import deque
def BFS(graph, visited, depths, starts):
queue = deque(starts)
dx,dy,dz=[0,0,0,0,1,-1],[0,0,1,-1,0,0],[1,-1,0,0,0,0]
while queue:
v = queue.popleft()
x,y,z=v[0],v[1],v[2]
visited[x][y][z] = True
for i in range(6):
nx,ny,nz=x+dx[i],y+dy[i],z+dz[i]
if 0<=nx<H and 0<=ny<N and 0<=nz<M:
if visited[nx][ny][nz] == False and graph[nx][ny][nz] == 0:
queue.append((nx,ny,nz))
depths[nx][ny][nz] = depths[x][y][z] + 1
graph[nx][ny][nz] = 1 #riped
M,N,H=map(int,input().split())
graph=[[] for _ in range(H)]
starts=[]
for i in range(H):
for j in range(N):
l = list(map(int,input().split()))
graph[i].append(l)
for k in range(len(l)):
if l[k] == 1:
starts.append((i,j,k))
visited=[[[False]*M for _ in range(N)] for _ in range(H)]
depths=[[[0]*M for _ in range(N)] for _ in range(H)]
BFS(graph, visited, depths, starts)
for h in range(H):
for x in range(N):
for y in range(M):
if graph[h][x][y] == 0:
print(-1) #not all has ripened
sys.exit()
max_depth=-2
for h in range(H):
for x in range(N):
max_depth=max(max_depth,max(depths[h][x]))
print(max_depth)
โด๏ธ ๋์ด ๋ถ๋ถ ์/ํ ๋ฐฉํฅ์ผ๋ก๋ ์์์ผ ํ๋ค๋ ์ ๋ง ์ฃผ์! ๋ฐฉํฅ ๋ฒกํฐ dx, dy = [0,0,0,0,-1,1], [0,0,-1,1,0,0], [-1,1,0,0,0,0] ์ด๋ ๊ฒ ์ด 6๊ฐ์ง์ ๋ฐฉํฅ๋ฒกํฐ ์กด์ฌ
โด๏ธ ์์์ ๋์์ ์งํ / depths BFS ์ต๋๊ฐ / ๊ทธ ์ธ ๋ฌธ์ ์ ๋ง๊ฒ ์งํ (์ฆ ๋๋จธ์ง๋ ์์ 7569 ํ ๋งํ ๋ฌธ์ ํ์ด์ ๋์ผ)
โ 14502 ์ฐ๊ตฌ์ โ (์ฐ๊ฒฐ๋ ธ๋)
import sys, copy
input=sys.stdin.readline
from collections import deque
from itertools import combinations
N,M=map(int,input().split())
graph_init=[]
virus=[]
pos=[]
def get_zero(graph, N, M, pos):
for i in range(N):
for j in range(M):
if graph[i][j] == 0:
pos.append((i,j))
return pos
def BFS(graph, virus, N, M, visited):
queue=deque(virus)
for v in virus:
visited[v[0]][v[1]] = True
dx,dy=[1,-1,0,0],[0,0,1,-1]
while queue:
v=queue.popleft()
for i in range(4):
nx,ny=v[0]+dx[i],v[1]+dy[i]
if 0<=nx<N and 0<=ny<M:
if not visited[nx][ny] and graph[nx][ny]==0:
visited[nx][ny]=True
graph[nx][ny] = 2
queue.append((nx,ny))
for x in range(N):
l,y=list(map(int,input().split())),0
graph_init.append(l)
for i in l:
if i == 2:
virus.append((x,y))
y+=1
pos=get_zero(graph_init,N,M,pos) #to find the potential spots to install a wall
ans=0
for pos_pair in combinations(pos,3):
graph=copy.deepcopy(graph_init)
for (x,y) in pos_pair:
graph[x][y] = 1 #make a wall
visited=[[False]*M for _ in range(N)]
BFS(graph, virus, N, M, visited) #make virus spread
areas=0
for i in range(N):
for j in range(M):
if graph[i][j] == 0:
areas+=1
ans=max(ans,areas)
print(ans)
โด๏ธ
(1) ๋ฒฝ์ ์ธ์ธ ์ ์๋ 0 ์์น pos list์ ๋ชจ์ผ๊ธฐ
(2) virus ์์น ๋ชจ์ผ๊ธฐ
(3) combinations(pos,3) ๋๋ฆด ๋๋ง๋ค brute-force๋ก ๋งค case ์์ ์์ญ์ ํฌ๊ธฐ ๊ตฌํด์ผ ํ๋ฏ๋ก deepcopy() ๊ณ์ ์ฌ์ฉ → ์ธ ๊ตฐ๋ฐ ๋ฒฝ ์ธ์ฐ๊ณ (1๋ก ๋ง๋ค๊ธฐ) → ์ฌ๋ฌ virus ๋์์ ํผ์ง๊ฒ BFS ๋๋ฆฌ๊ธฐ → 0์ธ ๊ฐ์ areas๋ก ๊ตฌํด์ ans update
โ 10026 ์ ๋ก์์ฝ โ (์ฐ๊ฒฐ๋ ธ๋)
import sys, copy
input=sys.stdin.readline
from collections import deque
N=int(input())
arr=[]
ans1,ans2=0,0
def BFS1(arr,visited,N,color,start):
queue=deque([start])
dx,dy=[0,0,1,-1],[1,-1,0,0]
while queue:
v=queue.popleft()
for i in range(4):
nx,ny=v[0]+dx[i],v[1]+dy[i]
if 0<=nx<N and 0<=ny<N:
if visited[nx][ny] == False and arr[nx][ny] == color:
visited[nx][ny]=True
queue.append((nx,ny))
def BFS2(arr,visited,N,color,start):
queue=deque([start])
dx,dy=[0,0,1,-1],[1,-1,0,0]
while queue:
v=queue.popleft()
for i in range(4):
nx,ny=v[0]+dx[i],v[1]+dy[i]
if 0<=nx<N and 0<=ny<N:
if visited[nx][ny] == False:
if color=='B':
if arr[nx][ny] == 'B':
visited[nx][ny]=True
queue.append((nx,ny))
else: #'R''G'
if arr[nx][ny] in ['R','G']:
visited[nx][ny]=True
queue.append((nx,ny))
for _ in range(N):
arr.append(list(input().rstrip()))
visited1=[[False]*N for _ in range(N)]
visited2=[[False]*N for _ in range(N)]
for i in range(N):
for j in range(N):
color=arr[i][j]
if not visited1[i][j]:
visited1[i][j] = True
BFS1(arr,visited1,N,color,(i,j))
ans1+=1
if not visited2[i][j]:
visited2[i][j] = True
BFS2(arr,visited2,N,color,(i,j))
ans2+=1
print(ans1,ans2)
โด๏ธ ์ ๋ก์์ฝ์ด ์๋ ๊ฒฝ์ฐ ๋จ์ํ ์ฐ๊ฒฐ์์ญ์ ๊ฐ์ + ์ ๋ก์์ฝ์ผ ๊ฒฝ์ฐ R/G/B if๋ฌธ ๊ตฌ๋ถ๋ง ํด์ฃผ๋ฉด ๋จ
โ 1240 ๋ ธ๋ ์ฌ์ด์ ๊ฑฐ๋ฆฌ โ (๋ ธ๋ ๊ฑฐ๋ฆฌ)
import sys
input=sys.stdin.readline
from collections import deque
def BFS(tree, visited, x, y, d):
visited[x]=True
queue=deque([(x,0)])
while queue:
v,d=queue.popleft()
if v == y:
return d
for sub_v in tree[v]:
if not visited[sub_v[0]]:
visited[sub_v[0]]=True
queue.append((sub_v[0],sub_v[1]+d))
N,M=map(int,input().split())
tree=[[] for _ in range(N+1)]
for _ in range(N-1):
a,b,d=map(int,input().split())
tree[a].append((b,d))
tree[b].append((a,d))
for _ in range(M):
x,y=map(int,input().split())
visited=[False]*(N+1)
print(BFS(tree,visited,x,y,0))
โด๏ธ BFS์ depth ๊ตฌํ๋ ๋ฐฉ์๊ณผ ๋น์ทํ๊ฒ BFS์ ์ฃผ์ด์ง ๋ ๋ ธ๋ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ ๊ณ์ updateํ๋ฉด์ ํ ์ ์๋ค.
โด๏ธ ์ฃผ์ด์ง node์ (x,0) tuple์ queue๋ก ๋๋ฆฌ๊ณ ((node ๋ฒํธ, ์ฃผ์ด์ง node์์ ํด๋น node ๋ฒํธ๊น์ง์ ๊ฑฐ๋ฆฌ)๊ฐ tuple ํํ), ์ํ๋ ๋ ธ๋์ ๋๋ฌํ๋ค๋ฉด(v==y) ๋ฐ๋ก d ์ถ๋ ฅ
โป BFS ์ฌ์ฉ ํ์! BFS๋ฉด ๋์์ ์ฌ๋ฌ ๋ฐฉํฅ์ผ๋ก ๋ป์น๊ธฐ ๋๋ฌธ์ ๊ฐ node์ ์๋ node๋ก๋ถํฐ์ ์ต๋จ๊ฑฐ๋ฆฌ(์ฆ, ๊ฐ์ ๊ฐ์ค์น์ ํฉ)์ด ์ ์ฅ๋๋ฏ๋ก, queue๋ก๋ง ์ด๋์ํจ๋ค๋ฉด ์ต์ข node์ ๊ฐ์ ๋์ tuple ๋๋ฒ์งธ ์์ ๋ฐ๋ก ์ถ๋ ฅํ๋ฉด ๋! (์ต๋จ๊ฑฐ๋ฆฌ ๋ณํ๋ฌธ์ )
โด๏ธ <์ต๋จ๊ฑฐ๋ฆฌ์ ๋ค๋ฅธ ์ > queue์ ๋์๊ฐ๋ ์ ๋ณด๊ฐ ๋ ๊ฐ + BFS์ด๋ฏ๋ก ์์ node์์ ์์๋๋ ๊ฑฐ๋ฆฌ ๋์ (d)
โ 13913 ์จ๋ฐ๊ผญ์ง 4 โ (์ต๋จ๊ฒฝ๋ก + ๊ฒฝ๋ก ๋ด์ฉ ์ถ์ )
import sys
input=sys.stdin.readline
from collections import deque
N,K=map(int,input().split())
def BFS(visited, depths, start):
visited[start] = True
depths[start] = 0
path[start] = 0
queue = deque([start])
while queue:
next_node= queue.popleft()
for child in [next_node-1, next_node+1, next_node*2]:
if child == K:
visited[child] = True
print(depths[next_node]+1)
path[child] = next_node
return
elif 0 <= child <= 100_000 and not visited[child]:
visited[child] = True
queue.append(child)
depths[child] = depths[next_node] + 1
path[child] = next_node
else:
pass
if N==K:
print(0)
print(K)
else:
visited=[False]*(100_000+1)
depths=[-1]*(100_000+1)
path=[-1]*(100_000+1)
start = N
ans=[K]
ind=K
BFS(visited, depths, start)
while path[ind]!=N:
ans.append(path[ind])
ind=path[ind]
ans.append(N)
print(*ans[::-1])
โด๏ธ ๊ฐ์ค์น ์ฐ์ ์์ ์๋ BFS์ ์ผ๋ฐ์ ์ธ ์ต๋จ๊ฒฝ๋ก ์ถ๋ ฅ์ ์ค๋ฒ1 <1697 ์จ๋ฐ๊ผญ์ง> ๋ฌธ์ . ์ฌ๊ธฐ์ ์ต๋จ๊ฒฝ๋ก์ ๋ชจ๋ ๋ ธ๋ ๋ฒํธ๋ฅผ ์ถ๋ ฅํ๋ ์ต๋จ๊ฒฝ๋ก ์ถ๋ ฅ ๊ธฐ๋ฅ์ด ์ถ๊ฐ
โด๏ธ ์๋ ๊ทธ๋ฆผ์ ์ฐธ์กฐํ๋ฏ, ์์ node๋ฅผ index๋กํ๊ณ ํด๋น ์์ node์ list value๋ก ๋ถ๋ชจ node๋ฅผ ์ ์ฅ. ๊ทธ๋ฌ๋ฉด ๋์ฐฉ ๋ ธ๋ K index๋ถํฐ ์ญ์ผ๋ก N index ๋ง๋ ๋ ๊น์ง ์ถ๋ ฅํ๋ idea
: queue์ node๊ฐ ๋ค์ด๊ฐ ๋ ๋ง๋ค path[child] = next_node๋ก path update. ์๋ฅผ ๋ค์ด 5์์ 17๊น์ง์ ์ต๋จ๊ฒฝ๋ก ๋ด์ฉ ์ถ๋ ฅํ๊ณ ์ถ๋ค๋ฉด ๊ฑฐ๊พธ๋ก index 17๋ถํฐ index 5๋ฅผ ๋ง๋ ๋๊น์ง ์ฐจ๋ก๋๋ก ์ญ์ถ์ ๊ฒฝ๋ก ์ ์ฅํด ์ถ๋ ฅ
โ 13549 ์จ๋ฐ๊ผญ์ง 3 โ (์ต๋จ๊ฒฝ๋ก)
import sys
input = sys.stdin.readline
from collections import deque
N,K=map(int,input().split())
depths=[-1]*(100_001)
visited=[False]*(100_001)
def BFS(depths, visited, N):
queue = deque([N])
visited[N] = True
depths[N] = 0
while queue:
v = queue.popleft()
if (2*v)<=100_000 and not visited[2*v]:
visited[2*v] = True
queue.append(2*v)
depths[2*v] = depths[v]
if (v*2) == K:
return
if 0<=(v-1) and not visited[(v-1)]:
visited[v-1] = True
queue.append(v-1)
depths[v-1] = depths[v] + 1
if (v-1) == K:
return
if (v+1)<=100_000 and not visited[(v+1)]:
visited[v+1] = True
queue.append(v+1)
depths[v+1] = depths[v] + 1
if (v+1) == K:
return
if N==K:
print(0)
else:
BFS(depths, visited, N)
print(depths[K])
โด๏ธ ์ค๋ฒ1 1697 ์จ๋ฐ๊ผญ์ง ๋ฌธ์ ์ ์ ์ฌ
→ ํ์ง๋ง ์ ๋ฌธ์ ๋ 0์ด ํ์ 2*X๋ก ์ด๋ํ๋ค๋ ์ . ์ฆ X-1์ด๋ X+1 ์ด๋๋ณด๋ค 2*X๋ฅผ ๋จผ์ ๊ณ ๋ ค(๊ฐ์ค์น ์ฐ์ ์์๊ฐ ์๋ BFS ๋ณํ)ํด์ผ ํ๋ค. ๋ฐ๋ผ์ v*2๊ฐ K์ธ์ง ์๋ ์ง๋ฅผ ๋ค๋ฅธ ์ผ์ด์ค X-1 / X+1 ์ด๋๋ณด๋ค ๋จผ์ ๋ฐ์ ธ์ผ ํจ. queue์์ ๊ฐ์ฅ ๋จผ์ 2*X๋ก ์ด๋ํ ๊ฒฝ์ฐ๊ฐ ๋๊ธฐํด์ผ ํ์์์ธ X-1์ด๋ X+1๋ก ์ด๋ํ์ ๋ ๋์จ ์ต๋จ์๊ฐ๋ณด๋ค ๋ ์ต๋จ์๊ฐ์ด ๋์๋ ๋จผ์ ์ก์์ ์ถ๋ ฅํ ์ ์๊ธฐ ๋๋ฌธ
โ 16928 ๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์ โ (์ต๋จ๊ฒฝ๋ก + ๋ณํ)
import sys
input=sys.stdin.readline
from collections import deque
N,M=map(int,input().split())
depths=[-1]*101
visited=[False]*101
d=[1,2,3,4,5,6]
snake_ladder=dict() #no snake/ladder exists in 1 and 100
def BFS(depths, visited, start):
visited[start] = True
depths[start] = 0
queue=deque([start])
while queue:
v = queue.popleft()
for i in range(6):
nx=v+d[i]
if nx<=100 and not visited[nx]:
depths[nx] = depths[v] + 1
visited[nx] = True
if nx==100: #arrived at destination
return
if nx not in snake_ladder.keys(): # not arrived in snake / ladder
queue.append(nx)
else: #arrived in snake/ladder
after=snake_ladder[nx]
if not visited[after]:
visited[after] = True
depths[after] = depths[nx]
queue.append(after)
for _ in range(N):
x,y=map(int,input().split())
snake_ladder[x]=y
for _ in range(M):
u,v=map(int,input().split())
snake_ladder[u]=v
BFS(depths,visited,1)
print(depths[100])
โด๏ธ ์ต๋จ๊ฑฐ๋ฆฌ ๊ตฌํ๊ธฐ BFS depth ์ ํ์ ์ธ ์ ํ์, ๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ๋ฅผ ํ์ฉํด ๋ค๋ฅธ node์์ ๋ค๋ฅธ node๋ก ์ด๋์ด ๊ฐ๋ฅํ ๊ธฐ๋ฅ๋ง ์ถ๊ฐ๋จ
โด๏ธ dict()๋ฅผ ๋ง๋ค์ด snake๋ ladder์ผ ๊ฒฝ์ฐ ์ดํ ์ด๋๋๋ node๊ฐ not visited์ผ ๊ฒฝ์ฐ depth ๋ณํ ์์ด ํ ๋น / ์ดํ ์ด๋๋๋ node ๋ฐฉ๋ฌธ ์ฒ๋ฆฌ / queue์ ์ดํ ์ด๋๋๋ node ๋ฃ๊ธฐ 3๊ฐ๋ง ์ฒ๋ฆฌํ๋ฉด ๋ฐ๋ก ๋!
โ BFS์ด๊ณ ์์์ ์ด ์ ํด์ ธ์์ผ๋ฏ๋ก ๋์ฐฉ์ ์ ํฅํด ๋์์ ๋ฐฉํฅ์ด ์๋ ์ํ๋ก ์งํํ๊ธฐ ๋๋ฌธ์ ๋์ค์ ๋ฑ์ด๋ ์ฌ๋ค๋ฆฌ๋ก node๋ฅผ ์ด๋ํด๋ visited ์ฒ๋ฆฌ๋ง ์ ํ๋ค๋ฉด ๋์ ๊น์ง ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ BFS depth๋ก ๋ฐ๋ก ๊ตฌํ ์ ์๋ค.
โ 9019 DSLR โ (์ต๋จ๊ฒฝ๋ก + ๋ณํ)
import sys
input=sys.stdin.readline
from collections import deque
def BFS(visited,start,end):
visited[start[0]]=True
queue=deque([start])
while queue:
v=queue.popleft()
#D
D=(2*v[0])%10000
#S
S=(v[0]-1) if (v[0]-1)>=0 else 9999
#L
l=str(v[0]).zfill(4)
L=int(l[1]+l[2]+l[3]+l[0])
#R
r=str(v[0]).zfill(4)
R=int(r[3]+r[0]+r[1]+r[2])
DSLR=[D,S,L,R]
for nv in range(len(DSLR)):
if not visited[DSLR[nv]]:
visited[DSLR[nv]]=True
if DSLR[nv] == end: #if answer found
return v[1]+['DSLR'[nv]]
queue.append([DSLR[nv],v[1]+['DSLR'[nv]]])
for _ in range(int(input())):
A,B=map(int,input().split())
visited=[False]*(10_000)
depths=[-1]*(10_000)
print(*BFS(visited,[A,[]],B),sep='')
โด๏ธ ์ BOJ 1240 ๋ ธ๋ ์ฌ์ด์ ๊ฑฐ๋ฆฌ์ ๋ง์ฐฌ๊ฐ์ง๋ก queue์ ๋ฃ์ ๋, ๋ ธ๋ ๋ฒํธ + ํด๋น ๋ ธ๋๊น์ง์ DSLR ์กฐํฉ ๋ช ๋ น์ด๋ฅผ ๋ฃ๋๋ค๋ BFS ์ต๋จ๊ฑฐ๋ฆฌ ์์ฉ๋ฌธ์ . BFS traversingํ๋ฉด์ ๋ ๋ฒ์งธ ์ ๋ณด ๋ฌธ์์ด์ด ๊ณ์ ๋ํด์ง๋ง ๋ณด๋ฉด ๋จ. queue์ ๋ ๊ฐ์ง ์ ๋ณด๊ฐ ๋ค์ด๊ฐ์ ์ธ์งํ๊ธฐ๋ง ํ๋ฉด OK!
โ 1963 ์์ ๊ฒฝ๋ก โ (์ต๋จ๊ฒฝ๋ก + ์์ ํ์ )
import sys
input=sys.stdin.readline
from collections import deque
def BFS(start,end):
dq=deque([(start,0)])
while dq:
n,depth=dq.popleft()
if not visited[n]:
visited[n] = True
for i in range(4):
for j in range(10):
if i == 0:
if j != 0:
next_n = int(str(j)+str(n)[1:])
else: continue
else:
next_n = int(str(n)[:i]+str(j)+str(n)[i+1:])
if next_n == end:
return depth + 1
else:
if not visited[next_n] and sieve[next_n]:
dq.append((next_n,depth+1))
return 'Impossible'
#sieve ~9999
sieve = [True]*(10001)
sieve[0],sieve[1]=False,False
for i in range(2,10001):
if sieve[i] == True:
for j in range(i,10001,i):
sieve[j] = False
sieve[i] = True
for _ in range(int(input())):
x,y=map(int,input().split())
visited=[False]*10001
if x == y:
print(0)
else:
print(BFS(x,y))
โด๏ธ x → y๋ก ๊ฐ๋ ์์์ ๊ฒฝ๋ก๋ฅผ BFS๋ก ์ฐพ๋๋ค. x์ ๊ฐ ์๋ฆฌ๋ฅผ brute-force๋ก 0๋ถํฐ 9๊น์ง ๋ฐ๊พธ๋ฉฐ(์ฒซ ์๋ฆฌ๋ง 0 ์ ์ธ) ๋ง๋ next_n์ด ์์์ ํด๋น๋๊ณ not visited๋ผ๋ฉด BFS deque์ (next_n, depth + 1) append. (๋ค ์๋ฆฌ๊น์ง ์์ sieve ์๋ผํ ์คํ ๋ค์ค ์ฒด๋ก ๋ฏธ๋ฆฌ ์์ฑ)
โป ์ด ๋ not visited ์ ๊ฒ ์ด์ ๋, ์ด๋ฏธ ๋ฐฉ๋ฌธํ๋ค๋ฉด ๋ฐฉ๋ฌธํ ์ซ์์ depth๊ฐ ํ์ฌ depth๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ผ๋ฏ๋ก ํด๋น next_n ์ดํ๋ฅผ ์ ๊ฒํ ํ์ x
'BOJ > ๐ฅ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
โ Coordinate Compression Advanced - 2 Solvedโ (0) | 2023.12.28 |
---|---|
โ Tree Advanced I - 1 Solvedโ (1) | 2023.12.22 |
โ Greedy Upper-Advanced I - 1 Solvedโ (1) | 2023.10.18 |
โ BF Advanced I - 3 Solvedโ (0) | 2023.10.06 |
โ Greedy Advanced I - 4 Solvedโ (0) | 2023.08.30 |
๋๊ธ