[Baekjoon/๐ŸฅˆSilverโ…ก] 1260: DFS์™€ BFS

2 ๋ถ„ ์†Œ์š”

๐Ÿ“ƒ๋ฌธ์ œ

๊ทธ๋ž˜ํ”„๋ฅผ DFS๋กœ ํƒ์ƒ‰ํ•œ ๊ฒฐ๊ณผ์™€ BFS๋กœ ํƒ์ƒ‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค. ๋‹จ, ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š” ์ •์ ์ด ์—ฌ๋Ÿฌ ๊ฐœ์ธ ๊ฒฝ์šฐ์—๋Š” ์ •์  ๋ฒˆํ˜ธ๊ฐ€ ์ž‘์€ ๊ฒƒ์„ ๋จผ์ € ๋ฐฉ๋ฌธํ•˜๊ณ , ๋” ์ด์ƒ ๋ฐฉ๋ฌธํ•  ์ˆ˜ ์žˆ๋Š” ์ ์ด ์—†๋Š” ๊ฒฝ์šฐ ์ข…๋ฃŒํ•œ๋‹ค. ์ •์  ๋ฒˆํ˜ธ๋Š” 1๋ฒˆ๋ถ€ํ„ฐ N๋ฒˆ๊นŒ์ง€์ด๋‹ค.

๐Ÿ“ƒ์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์ •์ ์˜ ๊ฐœ์ˆ˜ N(1 โ‰ค N โ‰ค 1,000), ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜ M(1 โ‰ค M โ‰ค 10,000), ํƒ์ƒ‰์„ ์‹œ์ž‘ํ•  ์ •์ ์˜ ๋ฒˆํ˜ธ V๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ๋‹ค์Œ M๊ฐœ์˜ ์ค„์—๋Š” ๊ฐ„์„ ์ด ์—ฐ๊ฒฐํ•˜๋Š” ๋‘ ์ •์ ์˜ ๋ฒˆํ˜ธ๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. ์–ด๋–ค ๋‘ ์ •์  ์‚ฌ์ด์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ„์„ ์ด ์žˆ์„ ์ˆ˜ ์žˆ๋‹ค. ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๊ฐ„์„ ์€ ์–‘๋ฐฉํ–ฅ์ด๋‹ค.

๐Ÿ“ƒ์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— DFS๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ, ๊ทธ ๋‹ค์Œ ์ค„์—๋Š” BFS๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. V๋ถ€ํ„ฐ ๋ฐฉ๋ฌธ๋œ ์ ์„ ์ˆœ์„œ๋Œ€๋กœ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค.

๋ฌธ์ œ

๐Ÿ™‹โ€โ™€๏ธ์ ‘๊ทผ ๋ฐฉ๋ฒ•

๐Ÿ‘ฉ ์šฐ์„  ๋ฌธ์ œ์—์„œ ์š”๊ตฌํ•˜๋Š” DFS์™€ BFS๊ฐ€ ๋ฌด์—‡์ธ์ง€๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค. ํ•ด๋‹น ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ๋Š” ์ด์ „ 18352: ํŠน์ • ๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ ๋ฌธ์ œ๋ฅผ ํ’€์ดํ•˜๋ฉด์„œ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค!!

๐Ÿ‘ฉ ํ•ด๋‹น ๋ฌธ์ œ์—์„œ ๊ฐ„์„ ๋“ค์€ ๋ชจ๋‘ ์–‘๋ฐฉํ–ฅ์ด๋‹ค. ์ฆ‰, [1, 2]๊ฐ€ ์ฃผ์–ด์กŒ์„ ๋•Œ, 1์—์„œ ์ถœ๋ฐœํ•ด 2๋กœ ๊ฐˆ ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, 2์—์„œ ์ถœ๋ฐœํ•ด 1๋กœ ๊ฐˆ ์ˆ˜๋„ ์žˆ๋‹ค.

  • ๋”ฐ๋ผ์„œ N๊ฐœ์˜ ์ •์ ์ด ์กด์žฌํ•  ๋•Œ, ๊ฐ„์„ ์˜ ์กด์žฌ์—ฌ๋ถ€๋ฅผ ๊ธฐ๋กํ•˜๊ธฐ ์œ„ํ•ด N*N ๋ฆฌ์ŠคํŠธ๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•œ๋‹ค.
  • ์–‘๋ฐฉํ–ฅ์ด๋ฏ€๋กœ [1,2]๊ฐ€ ๊ฐ„์„ ์œผ๋กœ ์ฃผ์–ด์กŒ์„ ๋•Œ๋Š” 1ํ–‰ 2์—ด๋ฟ๋งŒ ์•„๋‹ˆ๋ผ 2ํ–‰ 1์—ด์—๋„ ๊ฐ„์„ ์ด ์กด์žฌํ•จ์„ ํ‘œ์‹œํ•ด์•ผ ํ•œ๋‹ค.


๐Ÿ™‹โ€โ™€๏ธ BFS: ๋„“์ด ์šฐ์„  ํƒ์ƒ‰

  • ์‹œ์ž‘์ ์ด 1์ผ ๊ฒฝ์šฐ, 1๊ณผ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์ •์ ์„ ์ž‘์€ ์ˆ˜๋ถ€ํ„ฐ ์ฐจ๋ก€๋กœ ํƒ์ƒ‰ํ•œ๋‹ค.

  • ๋”์ด์ƒ 1๊ณผ ์—ฐ๊ฒฐ๋œ ์ •์ ์ด ์—†์„ ๊ฒฝ์šฐ, 1 ๋‹ค์Œ์œผ๋กœ ํƒ์ƒ‰์ด ์ง„ํ–‰๋œ ์ •์ ๊ณผ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์ •์ ์„ ํƒ์ƒ‰ํ•œ๋‹ค.
    • ํ•ด๋‹น ์ˆœ์„œ์— ๋งž๋Š” ์ •์ ์„ ์•Œ๋งž๊ฒŒ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ์–‘๋ฐฉํ–ฅ ํ์ธ deque์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๊ทธ๋ž˜ํ”„์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ์ •์ ์ด ํƒ์ƒ‰๋  ๋•Œ๊นŒ์ง€ ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

๐Ÿ™‹โ€โ™€๏ธ DFS: ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰

  • ์‹œ์ž‘์ ์ด 1์ผ ๊ฒฝ์šฐ, 1๊ณผ ์—ฐ๊ฒฐ๋œ ๊ฐ€์žฅ ์ž‘์€ ์ •์ ์„ ๋‹ค์Œ์œผ๋กœ ํƒ์ƒ‰ํ•œ๋‹ค.
    • ์ฆ‰ ํ•ด๋‹น ์ •์ ์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์„ ๋‹ค์‹œ ์ง„ํ–‰ํ•œ๋‹ค. (์žฌ๊ท€)
  • ๊ทธ๋ž˜ํ”„์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ์ •์ ์ด ํƒ์ƒ‰๋  ๋•Œ๊นŒ์ง€ ์œ„ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

๐Ÿ‘ฉโ€๐Ÿ’ป Algorithm

๐Ÿ‘ฉ ๊ทธ๋ ‡๋‹ค๋ฉด ์œ„ ๋‚ด์šฉ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘์„ฑํ•œ ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด์ž.

#21.11.01
import sys
from collections import deque

def dfs(v):
  global visit_lst1
  print(v, end=" ")
  visit_lst1[v] = 1
  for i in range(1, N+1):
  # 1๋ถ€ํ„ฐ N๊นŒ์ง€์˜ ์ •์ ์„ ํ™•์ธํ•˜๋ฉด v์™€ ๊ฐ„์„ ์ด ์กด์žฌํ•˜๋ฉฐ, ์•„์ง ํƒ์ƒ‰๋˜์ง€ ์•Š์€ ์ •์ ์ผ ๊ฒฝ์šฐ๋ฅผ ์ฐพ๋Š”๋‹ค.
    if visit_lst1[i] == 0 and graph[v][i] == 1:
      # ํ•ด๋‹น ์ •์ ์„ ๊ธฐ์ค€์œผ๋กœ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•œ๋‹ค.(์žฌ๊ท€!)
      dfs(i)

def bfs(v):
  global visit_lst2
  que = deque()
  que.append(v)
  visit_lst2[v] = 1
  while que:
    #deque์—์„œ ๋‹ค์Œ ํƒ์ƒ‰ํ•  ์ •์ ์„ ์•ž๋ถ€๋ถ„์—์„œ ๊บผ๋‚ด์˜จ๋‹ค.
    temp = que.popleft()
    print(temp, end=" ")
    #ํƒ์ƒ‰์ด ์ด๋ฃจ์–ด์ง€์ง€ ์•Š์€ ์ •์ ์„ ์ฐพ์•„ deque์— ๋„ฃ๋Š”๋‹ค.
    for i in range(1, N+1):
      if visit_lst2[i] == 0 and graph[temp][i] == 1:
        que.append(i)
        visit_lst2[i] = 1


N, M, V= map(int, sys.stdin.readline().split())
graph = [[0] * (N+1) for _ in range(N+1)]
visit_lst1 = [0 for i in range(N+1)]
visit_lst2 = [0 for i in range(N+1)]

for _ in range(M):
  a, b = map(int, sys.stdin.readline().rstrip().split())
  graph[a][b] = graph[b][a] = 1

dfs(V)
print()
bfs(V)

๊ฒฐ๊ณผ

๐Ÿ‘ฉ ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ์ƒ๊ฐ๋ณด๋‹ค ์ •๋ง ์˜ค๋žœ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค. ํ’€์ด ๋ฐฉ์‹์€ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์—ˆ์œผ๋‚˜ ์ž๊พธ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ’€์ดํ•˜๋ฉด์„œ ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๊ฒฝ์šฐ, ์žฌ๊ท€๋ฅผ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์ ์„ ์•Œ๊ฒŒ ๋˜์—ˆ๋‹ค. ๋˜ํ•œ, ์ด๋Ÿฌํ•œ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ deque๊ฐ€ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค๋Š” ์ ์„ ์ด๋ฒˆ ๋ฌธ์ œ๋ฅผ ํ†ตํ•ด์„œ ๋‹ค์‹œ ํ•œ ๋ฒˆ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

ํ‘ผ ๋‚ ์งœ๋Š” ์˜ค๋ž˜๋์ง€๋งŒ ์ •๋ฆฌ๋Š” ์ด์ œ์•ผ ํ•œ๋‹ค..๐Ÿ˜ถ ํ•œ๋™์•ˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ณต๋ถ€๋ฅผ ํ•˜์ง€ ๋ชปํ–ˆ๋‹ค๐Ÿ˜ฅ๐Ÿ˜ฅ ์ด์ œ ๋‹ค์‹œ ์ •์‹ ์ฐจ๋ฆฌ๊ณ  ํ•˜๋ฃจํ•˜๋ฃจ ๊พธ์ค€ํžˆ ํ’€์–ด๋‚˜๊ฐ€์•ผ๊ฒ ๋‹ค!!!

์ด๋ฒˆ ๊ฒŒ์‹œ๊ธ€๋„!!!

์—ฌ๊ธฐ์„œ

์ด๋งŒ ~~ ~(ห˜โ–พห˜~)

๐Ÿ“ƒ์ฐธ๊ณ 

  • https://steadily-worked.tistory.com/646
  • https://devuna.tistory.com/32

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ