๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐Ÿฆ• ๊ณต๋ฃก์ด ๋˜์ž!

๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS) ๋ณธ๋ฌธ

Development/CodingTest

๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰(DFS)

Kirok Kim 2021. 12. 27. 21:52

# ex) ๋ฏธ๋กœ์ฐพ๊ธฐ ํ•ต์‹ฌ ์ฝ”๋“œ ๋ฆฌ๋ทฐ 

while len(stack)>0: 
	now = stack.pop()
	if now ==dest:
		return True
	x= now[1] # ์—ด
	y= now[0] # ํ–‰
	if x - 1 > -1: 
		if maps[y][x-1]==0:
			stack.append([x-1,y])
			maps[y][x-1]=2
	if x + 1  < hori: # hori = x ์ขŒํ‘œ ๋
		if maps[y][x+1]==0:
			stack.append([x+1,y])
			maps[y][x+1]=2
	if y - 1 > -1: # ์œ„๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฉด
		if maps[y-1][x]==0:
			stack.append([x,y-1])
			maps[y-1][x]=2
	if y + 1 < verti: # verti = y ์ขŒํ‘œ ๋
		if maps[y+1][x]==0:
			stack.append([x,y+1])
			maps[y+1][x]=2
return False
  • DFS ๋‹ค๋ฅธ ์˜ˆ์‹œ
# DFS ๋ฉ”์„œ๋“œ ์ •์˜
def dfs(graph,v, visited):
	# ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
	visited[v]=True
	print(v, end='')
	# ํ˜„์žฌ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋ฅผ ์žฌ๊ท€์ ์œผ๋กœ ๋ฐฉ๋ฌธ
	for i in graph[v]:
		if not visited[i]:
			dfs(graph,i,visited)

#๊ฐ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋œ ์ •๋ณด๋ฅผ ํ‘œํ˜„(2์ฐจ์› ๋ฆฌ์ŠคํŠธ)
graph=[
	[],
	[2,3,8],
	[1,7],
	[1,4,5],
	[3,5],
	[3,4],
	[7],
	[2,6,8],
	[1,7]
]

# ๊ฐ ๋…ธ๋“œ๊ฐ€ ๋ฐฉ๋ฌธ๋œ ์ •๋ณด๋ฅผ ํ‘œํ˜„(1์ฐจ์› ๋ฆฌ์ŠคํŠธ)
visited=[False]*9

# ์ •์˜๋œ DFS ํ•จ์ˆ˜ ํ˜ธ์ถœ
dfs(graph,1,visited)

>>> 1 2 7 6 8 3 4 5
  • DFS ๋‹ค๋ฅธ ์˜ˆ์ œ
# dfs๋กœ ํŠน์ • ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ  ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๋…ธ๋“œ๋“ค๋„ ๋ฐฉ๋ฌธ
def dfs(x,y):
	# ์ฃผ์–ด์ง„ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ฆ‰์‹œ ์ข…๋ฃŒ
	if x<= -1 or x>=n or y<=-1 or y>=m:
		return False
	# ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด
	if graph[x][y] ==0:
		# ํ•ด๋‹น ๋…ธ๋“œ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
		graph[x][y]=1
		# ์ƒ, ํ•˜, ์ขŒ, ์šฐ์˜ ์œ„์น˜๋“ค๋„ ๋ชจ๋‘ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœ
		dfs(x-1,y)
		dfs(x,y-1)
		dfs(x+1,y)
		dfs(x,y+1)
		return True
return False
	
# N, M์„ ๊ณต๋ฐฑ์„ ๊ธฐ์ค€์œผ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ ์ž…๋ ฅ ๋ฐ›๊ธฐ ์„ธ๋กœ ๊ธธ์ด N ๊ฐ€๋กœ ๊ธธ์ด M
n,m = map(int, input().split())

# 2์ฐจ์› ๋ฆฌ์ŠคํŠธ์˜ ๋งต ์ •๋ณด ์ž…๋ ฅ ๋ฐ›๊ธฐ
graph=[]
for i in range(n):
	graph.append(list(map(int, input())))

# ๋ชจ๋“  ๋…ธ๋“œ(์œ„์น˜)์— ๋Œ€ํ•˜์—ฌ ์Œ๋ฃŒ์ˆ˜ ์ฑ„์šฐ๊ธฐ
result =0
for i in range(n):
	for j in range(m):
		# ํ˜„์žฌ ์œ„์น˜์—์„œ DFS ์ˆ˜ํ–‰
		if dfs(i,j)==True:
			result+=1

print(result) # ์ •๋‹ต ์ถœ๋ ฅ
  • ์Šคํƒ / ํ ์˜ˆ์‹œ ์ฝ”๋“œ
class Stack(list):

	push = list.append
	
	def peek(self):
		return self[-1]##==self[(len(self)-1]

class Queue(list):

	put = list.append

	def peek(self):
		return self[0]

	def get(self):
		return self.pop(0)
from collections import deque

queue = deque()

queue.append(3)
queue.append(2)
queue.popleft()
queue.append(2)
queue.append(4)
queue.popleft()

print(queue)
#์‹คํ–‰๊ฒฐ๊ณผ
>>> deque([2,4])
queue.reverse() # ์—ญ์ˆœ์œผ๋กœ ๋ฐ”๊พธ๊ธฐ
print(queue)
#์‹คํ–‰๊ฒฐ๊ณผ
>>> deque([4,2])
  • list๋ฅผ ํ™œ์šฉํ•œ queue๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•˜๋ฉด ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ deque๋ณด๋‹ค ๋†’๋‹ค python์—์„œ๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ๋Š” deque๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
๋ฐ˜์‘ํ˜•
Comments