[Baekjoon/๐ŸฅˆSilverโ…ก] 18352: ํŠน์ • ๊ฑฐ๋ฆฌ์˜ ๋„์‹œ ์ฐพ๊ธฐ

2 ๋ถ„ ์†Œ์š”

Intro

๋ฌธ์ œ์‚ฌ์ง„

  • ์ž…๋ ฅ
    • N: ๋„์‹œ์˜ ์ˆ˜ (1~N)
    • M: ๋‹จ๋ฐฉํ–ฅ ๋„๋กœ์˜ ์ˆ˜
    • X: ์‹œ์ž‘์  ๋„์‹œ (1<= X <= N)
    • K: ๊ตฌํ•˜๊ณ ์ž ํ•˜๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ
  • ์ถœ๋ ฅ: ์ตœ๋‹จ๊ฑฐ๋ฆฌ๊ฐ€ K์ธ ๋„์‹œ๋“ค์„ ์ฐจ๋ก€๋กœ ์ถœ๋ ฅํ•œ๋‹ค.

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

์ตœ๋‹จ๊ฑฐ๋ฆฌ๊ฐ€ K์ธ ๋„์‹œ๋“ค์„ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ด๋ฏ€๋กœ ๋„์‹œ X์—์„œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด ๋ชจ๋“  ๋„์‹œ๋“ค์— ๋Œ€ํ•œ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ์•Œ์•„์•ผํ•œ๋‹ค.

๋ชจ๋“  ๋„๋กœ์˜ ๊ฑฐ๋ฆฌ๊ฐ€ 1์ด๋ผ๋Š” ๊ฐ€์ •์ด ์กด์žฌํ•˜๋ฏ€๋กœ ํ•ด๋‹น ๋ฌธ์ œ๋Š” ๊ฐ€์ค‘์น˜๋ฅผ 1๋กœ ํ•œ ๋‹ค์ต์ŠคํŠธ๋ผ๋ฅผ ์‚ฌ์šฉํ•ด ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๋˜ํ•œ, ๋ชจ๋‘ ๊ฐ€์ค‘์น˜๊ฐ€ 1๋กœ ๋™์ผํ•˜๋ฏ€๋กœ ๋‹จ์ˆœํžˆ BFS(๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰)์„ ํ†ตํ•ด์„œ๋„ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ™‹BFS(๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰) VS DFS(๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰)

๊ทธ๋ ‡๋‹ค๋ฉด ์šฐ์„  ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋‘๊ฐ€์ง€ ๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด์ž.

๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‘๊ฐ€์ง€ ๋ฐฉ์‹์ด ์กด์žฌํ•œ๋‹ค.

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

์œ„ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๊ณ ์ž ํ• ๋•Œ ์šฐ์„  ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰๋ฅผ ์ ์šฉํ•ด๋ณด์ž!


๐Ÿ™ŒBFS(๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰)

ํ•ด๋‹น ํƒ์ƒ‰ ๋ฐฉ๋ฒ•์€ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๋„ˆ๋น„๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•œ๋‹ค.

๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ทธ๋ž˜ํ”„์˜ ๊นŠ์ด๋ฅผ ๋‹จ๊ณ„๋กœ ํ‘œ์‹œํ•œ๋‹ค๋ฉด 1๋‹จ๊ณ„ -> 2๋‹จ๊ณ„ -> 3๋‹จ๊ณ„ -> 4๋‹จ๊ณ„์ˆœ์œผ๋กœ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•œ๋‹ค.

  • ์—ฌ๊ธฐ์„œ ๋„ˆ๋น„๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— A๋ฅผ ํƒ์ƒ‰ํ•œ ํ›„์—๋Š” 2๋‹จ๊ณ„์˜ B์™€ C, 3๋‹จ๊ณ„์˜ D, E, F, 4๋‹จ๊ณ„์˜ G, H์ˆœ์œผ๋กœ ํƒ์ƒ‰์ด ๋งˆ๋ฌด๋ฆฌ๋œ๋‹ค.



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

๊ทธ๋ ‡๋‹ค๋ฉด ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰์˜ ๊ฒฐ๊ณผ๋Š” ์–ด๋–จ๊นŒ?

์•„๋งˆ BFS ๋ฐฉ์‹์„ ์‚ดํŽด๋ณด๋ฉด์„œ DFS์˜ ๋ฐฉ์‹ ๋˜ํ•œ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ์—ˆ์„ ๊ฒƒ์ด๋‹ค!! ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ ๋ฐฉ๋ฒ• ๋˜ํ•œ ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๊นŠ์ด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•œ๋‹ค.

๊ทธ๋ž˜ํ”„์˜ ๊นŠ์ด๋ฅผ ๋‹จ๊ณ„๋กœ ํ‘œ์‹œํ•œ๋‹ค๋ฉด 1๋‹จ๊ณ„ -> 2๋‹จ๊ณ„ -> 3๋‹จ๊ณ„ -> 4๋‹จ๊ณ„์ˆœ์œผ๋กœ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ์€ BFS์™€ ๋™์ผํ•˜๋‹ค.

  • ์—ฌ๊ธฐ์„œ ๊นŠ์ด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‹œ์ž‘์ ์ธ A์—์„œ๋ถ€ํ„ฐ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๋†’์€ ๋‹จ๊ณ„๊นŒ์ง€ ํƒ์ƒ‰์„ ๋จผ์ € ์ง„ํ–‰ํ•œ๋‹ค. ์ฆ‰, A -> B -> D -> G๊ฐ€ ๋จผ์ € ํƒ์ƒ‰์ด ์ง„ํ–‰๋œ๋‹ค.

  • ์ด ๋ฐฉ์‹ ๋˜ํ•œ, ๊ธฐ๋ณธ์ ์œผ๋กœ ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ํƒ์ƒ‰์ด ์ง„ํ–‰๋˜๋ฏ€๋กœ ๋‹ค์Œ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊นŠ์ด ํƒ์ƒ‰์ด ์ด์–ด์„œ ์ง„ํ–‰๋œ๋‹ค. ์ฆ‰, E -> H๊ฐ€ ํƒ์ƒ‰๋œ๋‹ค.

  • ๋งˆ์ง€๋ง‰์œผ๋กœ C -> F๊ฐ€ ํƒ์ƒ‰๋˜๋ฉด์„œ ํƒ์ƒ‰์ด ๋๋‚˜๊ฒŒ ๋œ๋‹ค.


๐Ÿ‘ฉ ํ•ด๋‹น ๋ฌธ์ œ์—์„œ๋Š” ์‹œ์ž‘์ ์—์„œ๋ถ€ํ„ฐ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๊ฐ€ K์ธ ๋„์‹œ๋“ค์„ ๋ชจ๋‘ ์ถœ๋ ฅํ•˜๋Š” ๋ฌธ์ œ์ด๋ฏ€๋กœ DFS๊ฐ€ ์•„๋‹Œ BFS๋ฅผ ์‚ฌ์šฉํ•ด ํŠน์ • ๋‹จ๊ณ„์— ์žˆ๋Š” ๋ชจ๋“  ์ •์ ์„ ์ถœ๋ ฅํ•˜๋ฉด ๋œ๋‹ค!

๐Ÿ‘ฉโ€๐Ÿ’ปAlgoritm: BFS(๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰)

๊ทธ๋ ‡๋‹ค๋ฉด BFS ๋ฐฉ์‹์„ ์ ์šฉํ•ด ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž‘์„ฑํ•ด๋ณด์ž!

#21.11.03
#BFS ์‚ฌ์šฉ
import sys
from collections import deque
# X๋กœ ์‹œ์ž‘ํ•ด์„œ ๊ฐ ์ง€์ ๊นŒ์ง€ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ตœ๋‹จ ๊ฑฐ๋ฆฌ

N, M, K, X = map(int, sys.stdin.readline().split())
lst = [M+1 for _ in range(N+1)]
lst[X] = 0

#๋‹จ๋ฐฉํ–ฅ ๋„๋กœ ์ €์žฅ
road = [[] for _ in range(N+1)]
for j in range(M):
  temp1, temp2 = map(int, sys.stdin.readline().split())
  road[temp1].append(temp2)

que = deque([X])
while que:
  // ๋ฑ์—์„œ ๋‹ค์Œ ํƒ์ƒ‰ํ•ด์•ผ ํ•  ๋Œ€์ƒ์„ ๊บผ๋ƒ„
  check = que.popleft()
  // ํ•ด๋‹น ์ •์ ์—์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ •์ ์„ ์ฐจ๋ก€๋Œ€๋กœ ํƒ์ƒ‰ํ•จ
  for j in road[check]:
    // ์ด๋ฏธ ํƒ์ƒ‰์ด ์ด๋ฃจ์–ด์ง„ ์ •์ ์ด ์•„๋‹Œ ๊ฒฝ์šฐ
    if lst[j] == M+1:
      que.append(j)
      lst[j] = lst[check] + 1

if K in lst:
  for i in range(1, N+1):
    if lst[i] == K:
      print(i)
else:
  print(-1)



๐Ÿ‘ฉโ€๐Ÿ’ปcode ๋ถ„์„

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทธ๋ž˜ํ”„์— ๋Œ€ํ•œ ์ž…๋ ฅ์—์„œ ์ด์ค‘ ๋ฆฌ์ŠคํŠธ road์— ์ €์žฅ๋˜๋Š” ๊ฐ’์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

[[], [2, 3], [3, 4], [], []]
  • ์ฆ‰, ์‹œ์ž‘์ ์˜ index ๊ฐ’์— ์‹œ์ž‘์ ์œผ๋กœ ๋ถ€ํ„ฐ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์ •์ ๋“ค์ด ์ €์žฅ๋œ๋‹ค.

  • deque๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•œ๋‹ค. ๊ทธ ๊ณผ์ •์„ ์‚ด์ง ์‚ดํŽด๋ณด์ž!

    • ์‹œ์ž‘์  1์ด ํƒ์ƒ‰์˜ ๋Œ€์ƒ์ผ ๊ฒฝ์šฐ

    • leftpop()์œผ๋กœ ์ธํ•ด 2๊ฐ€ ํƒ์ƒ‰์˜ ๋Œ€์ƒ์ผ ๊ฒฝ์šฐ

      • 3์€ ์ด๋ฏธ ์กด์žฌํ•˜๋ฏ€๋กœ 4๋งŒ deque์— ๋„ฃ๋Š”๋‹ค.



๐Ÿ‘ฉ ์ด๋ฒˆ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํ’€์ด๋Š” ๋น„๊ต์  ๊ฐ„๋‹จํ•˜์ง€๋งŒ ํ•„์ž๋Š” ํ•ด๋‹น ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š”๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ ธ๋‹ค.

์ฒ˜์Œ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž‘์„ฑํ•  ๋•Œ, deque๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋ณ„๋„์˜ lst์™€ index๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜๋ฅผ ๋”ฐ๋กœ ๋‘ ์œผ๋กœ์จ ํƒ์ƒ‰์˜ ๋Œ€์ƒ์„ ์„ ์ •ํ•˜์˜€๋‹ค. ๊ทธ ๊ฒฐ๊ณผ ์—ฌ๋ ค ๋ฒˆ์˜ ์‹œ๊ฐ„์ดˆ๊ณผ ๊ฒฐ๊ณผ๋ฅผ ์–ป์—ˆ๋‹ค..ใ…Žใ…Ž

์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ๋” ์ตํžˆ๊ณ  ํ•„์š”ํ•  ๋•Œ ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋” ๊ณต๋ถ€ํ•ด์•ผ๊ฒ ๋‹ค!!

์ด๋ฒˆ ํฌ์ŠคํŠธ๋Š” ์—ฌ๊ธฐ์„œ

์ด๋งŒ!

๋! ~(ห˜โ–พห˜~)

๐Ÿ“ƒ์ฐธ๊ณ 

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

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