DFS & BFS

Choooooยท2022๋…„ 9์›” 18์ผ
0
post-thumbnail

๐Ÿ˜† ๋™๋นˆ๋‚˜ ๋‹˜์˜ ์ด์ฝ”ํ…Œ 2021 ๊ฐ•์˜ ๋ชฐ์•„๋ณด๊ธฐ๋ฅผ ๋ณด๋ฉด์„œ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ฑ…์€ ์ด๊ฒƒ์ด ์ทจ์—…์„ ์œ„ํ•œ ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ๋‹ค with ํŒŒ์ด์ฌ์„ ์ฐธ๊ณ ํ•˜์—ฌ ํ•™์Šตํ–ˆ์Šต๋‹ˆ๋‹ค.๐Ÿ˜Š


โ€โ€โ€Ž โ€Ž

โšฝ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ : DFS/BFS

ํƒ์ƒ‰(Search)๋ž€ ๋งŽ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ ์ค‘์—์„œ ์›ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ฐพ๋Š” ๊ณผ์ •!

๋Œ€ํ‘œ์ ์ธ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ๋Š” DFS์™€ BFS๊ฐ€ ์žˆ๋‹ค.

DFS/BFS๋Š” ์ฝ”๋”ฉ ํ…Œ์ŠคํŠธ์—์„œ ๋งค์šฐ ์ž์ฃผ ๋“ฑ์žฅํ•˜๋Š” ์œ ํ˜•์ด๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ์ˆ™์ง€!!

DFS/BFS ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋ฐ˜๋“œ์‹œ ์•Œ์•„์•ผํ•  ์ž๋ฃŒ๊ตฌ์กฐ๋Š” ์Šคํƒ, ํ

๋จผ์ € ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด์ž.

โœˆ๏ธ์Šคํƒ ์ž๋ฃŒ๊ตฌ์กฐ

๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚˜์ค‘์— ๋‚˜๊ฐ€๋Š” ํ˜•์‹(์„ ์ž…ํ›„์ถœ)์˜ ์ž๋ฃŒ๊ตฌ์กฐ

์ž…๊ตฌ์™€ ์ถœ๊ตฌ๊ฐ€ ๋™์ผํ•œ ํ˜•ํƒœ๋กœ ์Šคํƒ์„ ์‹œ๊ฐํ™”ํ•˜์ž!

ํŒŒ์ด์ฌ์—์„œ ์Šคํƒ์„ ์ด์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋ฆฌ์ŠคํŠธ ์ด์šฉํ•˜๋ฉด ๋ผ

๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์›์†Œ๋ฅผ ์‚ฝ์ž…ํ•˜๋Š” append()ํ•จ์ˆ˜์™€ ๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ์— ์›์†Œ๋ฅผ ์‚ญ์ œํ•˜๋Š” pop()ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•ด์„œ ์Šคํƒ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด

์Šคํƒ์— ๋‹ด๊ฒจ์žˆ๋Š” ์›์†Œ๋ฅผ ์ถœ๋ ฅํ•  ๋•Œ ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ์—์„œ๋ถ€ํ„ฐ ์ถœ๋ ฅํ•œ๋‹ค๋ฉด ํ˜„์žฌ ์Šคํƒ์ด ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๊ตฌํ˜„๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌ์ŠคํŠธ์— ๋‹ด๊ธด ์›์†Œ๋ฅผ ๊ฑฐ๊พธ๋กœ ์ถœ๋ ฅํ•˜๋ฉด ๋ผ!

print(stack[::-1]) โ†’ ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ผ! ์ตœ์ƒ๋‹จ ์›์†Œ๋ถ€ํ„ฐ ์ถœ๋ ฅ! -- ์Šคํƒ์„ ์ฐจ๋ก€์ฐจ๋ก€ popํ•˜๋Š”๊ฒƒ๊ณผ ๊ฐ™์Œ

print(stack) --> ์ตœํ•˜๋‹จ ์›์†Œ๋ถ€ํ„ฐ ์ถœ๋ ฅ


ํ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•ด๋ณด์ž

โœˆ๏ธํ ์ž๋ฃŒ๊ตฌ์กฐ

๋จผ์ € ๋“ค์–ด์˜จ ๋ฐ์ดํ„ฐ๊ฐ€ ๋จผ์ € ๋‚˜๊ฐ€๋Š” ํ˜•์‹(์„ ์ž…์„ ์ถœ)์˜ ์ž๋ฃŒ๊ตฌ์กฐ

ํ๋Š” ์ž…๊ตฌ์™€ ์ถœ๊ตฌ๊ฐ€ ๋ชจ๋‘ ๋šซ๋ ค ์žˆ๋Š” ํ„ฐ๋„๊ณผ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ์‹œ๊ฐํ™”!

์ฆ‰, ์•ž์—์„œ ์‚ฝ์ž…ํ•ด์ฃผ๊ณ  ๋’ค์—์„œ ์‚ญ์ œํ•ด์ฃผ๋ฉด ๋ผ! โ†’ ํŒŒ์ด์ฌ์—์„œ ๊ณต๊ฐ„์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํ๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ๋Š” ๋ฆฌ์ŠคํŠธ๊ฐ€ ์•„๋‹Œ ๋ฐํฌ๋ฅผ ์‚ฌ์šฉํ•˜์ž.

ํŒŒ์ด์ฌ์—์„œ ํ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋Š” ๋ฐํฌ(deque) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ!!!

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/118a6415-4f78-4664-9722-f751aea93481.png

append()ํ•จ์ˆ˜๋Š” ๋ฆฌ์ŠคํŠธ์—์„œ ๋™์ž‘๊ณผ ๋™์ผ. ๋งˆ์ง€๋ง‰์— ์‚ฝ์ž…ํ•ด!!

popleft()ํ•จ์ˆ˜๋Š” ๊ฐ€์žฅ ์™ผ์ชฝ์— ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ผ๋•Œ ์‚ฌ์šฉ -- ๋จผ์ € ๋“ค์–ด์™€์žˆ๋Š” ๋ฐ์ดํ„ฐ๋Š” ์•ž์—์„œ๋ถ€ํ„ฐ ์ฑ„์›Œ์ง€์ž–์•„.


๐Ÿ’ฆ DFS๋ฅผ ๊ณต๋ถ€ํ•˜๊ธฐ ์ „์— ์žฌ๊ท€ํ•จ์ˆ˜์— ๋Œ€ํ•ด์„œ ํ™•์‹คํ•˜๊ฒŒ ์•Œ๊ณ  ๋„˜์–ด๊ฐ€๊ธฐ

๐ŸŽƒ์žฌ๊ท€ํ•จ์ˆ˜

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/19348c12-924c-4b57-b7ee-918a16865c6f.png

์žฌ๊ท€ํ•จ์ˆ˜(Recursive Function)๋Š” DFS๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์•ผ!
(๊ฑฐ์˜ ๋Œ€๋ถ€๋ถ„)

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/1326ca9f-95c1-411d-bb85-3118737f1a70.png

๐ŸŽˆํ•ญ์ƒ ์ข…๋ฃŒ์กฐ๊ฑด์„ ๋จผ์ € ์ƒ๊ฐํ•˜์ž!

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/f9890998-399c-4f71-89e2-93889bb4d110.png

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/4096f3be-4b19-4e16-8eb6-91219a5a0c8e.png


<์•ž์—์„œ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ด์ œ DFS์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž>

โšฝDFS : ๊นŠ์ด์šฐ์„ ํƒ์ƒ‰

์Šคํƒ์ž๋ฃŒ๊ตฌ์กฐ ํ˜น์€ ์žฌ๊ท€ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ๋‹ค.

์žฌ๊ท€ํ•จ์ˆ˜๋กœ ํƒ์ƒ‰ํ•˜๊ฑฐ๋‚˜ ๋ฌธ์ œ๋ฅผ ํ‘ผ๋‹ค๊ณ  ํ•  ๋•Œ, ํ•จ์ˆ˜ ์ด๋ฆ„์„ dfs๋กœ ํ•ด์„œ ํ’€์ž

  • ๊ตฌ์ฒด์ ์ธ ๋™์ž‘๊ณผ์ •
    1. ํƒ์ƒ‰ ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
    2. ์Šคํƒ์˜ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ์— ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์žˆ์œผ๋ฉด ๊ทธ ๋…ธ๋“œ๋ฅผ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
    3. ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด ์Šคํƒ์—์„œ ์ตœ์ƒ๋‹จ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ด
    4. ๋”์ด์ƒ 2๋ฒˆ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์„๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/33cebb9e-89e7-4f94-b6c6-4acbe0f0d9e5.png

ํƒ์ƒ‰์‹œ์ž‘๋…ธ๋“œ๋ฅผ ์ธ์ž๋กœ ์ฃผ๊ธฐ!

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/a49fe3ba-ee07-41ac-9516-2034bb98c9cf.png

์–ด๋””์„œ๋ถ€ํ„ฐ ๋ฐฉ๋ฌธํ•˜๋“  ์ƒ๊ด€์—†์–ด! ๊ทธ๋ž˜๋„ ๋ฒˆํ˜ธ๊ฐ€ ๋‚ฎ์€ ์ธ์ ‘๋…ธ๋“œ๋ถ€ํ„ฐ ์ค€๋น„ํ•˜์ž

๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ•˜๊ณ (visited[v] = 1) ์Šคํƒ์— ์‚ฝ์ž…ํ–ˆ์œผ๋‹ˆ(DFS(v)) ์ธ์ ‘๋…ธ๋“œ ํ™•์ธํ•ด์•ผํ•ด

๊ทธ๋ž˜ํ”„๋ฅผ ์ด์ฐจ์› ๋ฆฌ์ŠคํŠธ๋กœ ์ค€๋น„ํ•˜๊ณ , ํ•ด๋‹น ๋…ธ๋“œ์˜ ๊ฐ’์ด ๋ฐ”๋กœ ์ธ์ ‘๋…ธ๋“œ๊ฒ ๋„ค

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/d64c065a-6d9d-4b12-ae7f-48308cddbb04.png

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/874d786b-04d2-4eb5-83c5-aaf65b83a5eb.png

๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘๋…ธ๋“œ ์ค‘์—์„œ ๋…ธ๋“œ ๊ฐ’์ด ์ž‘์€ ๋…ธ๋“œ๋ถ€ํ„ฐ ๋ฐฉ๋ฌธํ•ด!!!!

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/8025c049-cbf0-4f0d-a9b4-8cb561ca63fd.png

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/0a05d274-26b8-4e89-b947-53feaa2d6689.png

๋”์ด์ƒ ๋“ค์–ด๊ฐˆ ๊ณณ์ด ์—†๋‹ค๋ฉด ๋Œ์•„์™€์„œ ๋‹ค์‹œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๊ฐ€ ์žˆ๋Š” ๊ณณ์œผ๋กœ ๋Œ์•„๊ฐˆ๊บผ์•ผ! (๋ฐฑํŠธ๋ž™ํ‚น)

์Šคํƒ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ•ด์„œ ๋“ค์–ด๊ฐ€์„œ ์ธ์ ‘๋…ธ๋“œ๊ฐ€ ์—†๋‹ค ? ๊ทธ๋Ÿผ ์ด์ œ ์Šคํƒ์—์„œ ๊บผ๋‚ด๋Š”๊ฑฐ์•ผ

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/4f557f4f-6d4b-4f28-bd55-318f139a4aac.png

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/4c98c69e-d211-43f7-abe4-f82ecdc7c614.png

๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘๋…ธ๋“œ๊ฐ€ ์žˆ๊ธฐ ๋–„๋ฌธ์— ๋‹ค์‹œ ์Šคํƒ์— ๋„ฃ๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ!

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/887b954e-de49-469d-81f8-ea984a6d9939.png

โšฝ์ „์ฒด๋…ธ๋“œ์˜ ํƒ์ƒ‰ ์ˆœ์„œ๋Š” ์Šคํƒ์— ๋“ค์–ด๊ฐ„ ์ˆœ์„œ์ด๋‹ค.

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/bf9be818-44f9-42cc-94e4-d8fc146febdd.png

๐ŸงจํŒŒ์ด์ฌ์œผ๋กœ DFS๊ตฌํ˜„ํ•˜๊ธฐ

ํŒŒ์ด์ฌ์—์„œ๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด 2์ฐจ์›๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•ด!

์ผ๋ฐ˜์ ์œผ๋กœ ๊ทธ๋ž˜ํ”„ ๋ฌธ์ œ๊ฐ€ ์ถœ์ œ๋˜๋ฉด ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ๊ฐ€ 1๋ฒˆ๋ถ€ํ„ฐ ์ถœ๋ฐœํ•˜๋Š” ๊ฒƒ์ด ๋งŽ๊ธฐ ๋–„๋ฌธ์— ์ธ๋ฑ์Šค 0๋ฒˆ์— ๋Œ€ํ•ด์„œ๋Š” ๋น„์›Œ๋‘๊ณ  1๋ฒˆ ์ธ๋ฑ์Šค๋ถ€ํ„ฐ ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๋ฆฌ์ŠคํŠธ ํ˜•ํƒœ๋กœ ๋‹ด์•„์ค„ ์ˆ˜ ์žˆ์–ด!

์ฆ‰ ์œ„์™€ ๊ฐ™์ด 1๋ฒˆ ๋…ธ๋“œ์™€ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋Š” 2,3,8๋ฒˆ์ด๋ผ๊ณ  ๋ฆฌ์ŠคํŠธ๋ฅผ ์ดˆ๊ธฐํ™”ํ•œ ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ!

โ†’๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ํ•˜๋‚˜์˜ 1์ฐจ์› ๋ฆฌ์ŠคํŠธ ํ•„์š”! -- ๊ธฐ๋ณธ๊ฐ’์„ False๋กœ ํ•ด์„œ ๋ชจ๋‘ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹œ์ž‘

๐Ÿš€ ์ธ๋ฑ์Šค 0์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ์‹์„ ์ด์šฉํ•˜๋Š”๊ฒŒ ๋ฌธ์ œ์—์„œ ๋‚˜์™€์žˆ๋Š” ๋…ธ๋“œ์˜ ๋ฒˆํ˜ธ๋ฅผ ๊ทธ๋Œ€๋กœ ์ธ๋ฑ์Šค ํ˜•ํƒœ๋กœ ๋งตํ•‘ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋” ํ—ท๊ฐˆ๋ฆฌ์ง€ ์•Š๊ณ  ์ง๊ด€์ ์ผ ์ˆ˜ ์žˆ์–ด!

โšฝdfsํ•จ์ˆ˜ ์ฝ”๋“œ ์ง์ ‘ ์งœ๋ณด๊ธฐ

#DFS ์†Œ์Šค์ฝ”๋“œ  -- DFS ๋ฉ”์„œ๋“œ ์ •์˜
def dfs(graph, v, visited):   #๊ทธ๋ž˜ํ”„์˜ ์ •๋ณด, ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌํ•  ๋ฆฌ์ŠคํŠธ ์ด์šฉ ๋ฆฌ์ŠคํŠธ๋Š” ๊ตณ์ด ์ธ์ž๋กœ ์•ˆ๋„ฃ์–ด์ค˜๋„ ๋˜๊ธด ํ•˜๋‹ค.
    #ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ
    visited[v] = True
    print(v, end = " ")
    #ํ˜„์žฌ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋‹ค๋ฅธ ๋…ธ๋“œ๋“ค ์žฌ๊ท€์ ์œผ๋กœ ๋ฐฉ๋ฌธ
    for i in graph[v]:   #graph[v]๋Š” ํ˜„์žฌ ๋…ธ๋“œ v์˜ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋“ค ํ•˜๋‚˜์”ฉ ๊บผ๋‚ด์„œ ํ™•์ธํ• ๊บผ์•ผ!!
        if visited[i] == False:  #์ธ์ ‘ํ•œ ๋…ธ๋“œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด ๋ฐฉ๋ฌธํ•ด์•ผ์ง€ --> if not์จ๋„ ๋จ
            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  #์ธ๋ฑ์Šค 1๋ถ€ํ„ฐ ํ• ๊บผ๋ผ ํ•œ๊ฐœ ๋”!
#์ •์˜๋œ DFSํ•จ์ˆ˜ ํ˜ธ์ถœ
dfs(graph, 1, visited)

โšฝ ํ•ญ์ƒ ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๋Š” ์ˆœ๊ฐ„ ํ˜„์žฌ ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ๋จผ์ € ํ•ด์ฃผ๋Š”๊ฑฐ ์žŠ์ง€๋ง์ž!


โšฝ BFS : ๋„ˆ๋น„์šฐ์„ ํƒ์ƒ‰

  • ๊ทธ๋ž˜ํ”„์—์„œ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ถ€ํ„ฐ ์šฐ์„ ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ํ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ด์šฉํ•˜๋ฉฐ ๋™์ž‘ ๊ณผ์ •์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž.
    1. ํƒ์ƒ‰ ์‹œ์ž‘ ๋…ธ๋“œ๋ฅผ ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.
    2. ํ์—์„œ ๋…ธ๋“œ๋ฅผ ๊บผ๋‚ธ ๋’ค์— ํ•ด๋‹น ๋…ธ๋“œ์˜ ์ธ์ ‘๋…ธ๋“œ ์ค‘์—์„œ ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ฅผ ๋ชจ๋‘ ํ์— ์‚ฝ์ž…ํ•˜๊ณ  ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.
    3. ๋” ์ด์ƒ 2๋ฒˆ์˜ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์„ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.
  • (์ตœ๋‹จ๊ฑฐ๋ฆฌ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ์—์„œ ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค.) โ†’ ์ด ์œ ํ˜•์œผ๋กœ ์ž์ฃผ ์‚ฌ์šฉ ๋ผ!!!
  • ๋™์ž‘์˜ˆ์‹œ

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/56e3c6d0-95bf-4295-a5ba-c98a190da50c.png

BFS๋Š” ํ•ด๋‹น์‹œ์ ์—์„œ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋ฅผ ํ•œ๋ฒˆ์— ์ „๋ถ€ ํ์— ๋„ฃ๋Š”๋‹ค๋Š” ๊ฒƒ์ด ํŠน์ง•!

  • ํŠนํžˆ BFS ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ํŠน์ • ์กฐ๊ฑด์—์„œ์˜ ์ตœ๋‹จ ๊ฒฝ๋กœ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•œ ๋ชฉ์ ์œผ๋กœ๋„ ํšจ๊ณผ์ ์œผ๋กœ ์‚ฌ์šฉ

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/55ff2c5a-ece7-4796-8139-f471eedef9f6.png

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/2edf0820-e7ad-4fd8-918c-732e18e39b14.png

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/a1eac7ca-6c14-4abe-9980-5120d3295fad.png

์ž‘์€ ๋…ธ๋“œ๋ถ€ํ„ฐ ๋„ฃ์„๊บผ์•ผ!

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/0b90234a-d2f7-4910-9f97-3f5b49899288.png

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/ef58e828-1596-4235-9623-fd371cdb99d9.png

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/7235b512-5695-415b-967f-18b1e47ac215.png

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/3a8a17cd-7d4a-407f-a4c6-805953f99130.png

์ „์ฒด ๋…ธ๋“œ์˜ ํƒ์ƒ‰ ์ˆœ์„œ : ํ์— ๋“ค์–ด๊ฐ„ ์ˆœ์„œ

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/468e642d-d730-40d7-85b9-72214b7529f2.png

ํŒŒ์ด์ฌ์—์„œ BFS์ฝ”๋“œ๋Š” ํ๋ฅผ ์œ„ํ•ด deque ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ ์–ธ!

DFS๋•Œ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 0๋ฒˆ ์ธ๋ฑ์Šค๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„

BFS ์†Œ์Šค์ฝ”๋“œ

#BFS๋ฉ”์„œ๋“œ ์ •์˜
def bfs(graph, start, visited):  #์‹œ์ž‘๋…ธ๋“œ๋ฅผ ํ์— ๋„ฃ์–ด์ค˜
    #ํ(Queue) ๊ตฌํ˜„์„ ์œ„ํ•ด deque ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ
    queue = deque([start])   #๋ฐํฌ๋กœ ๋ณ€ํ™˜ํ•  ๋•Œ ๋ฆฌ์ŠคํŠธํ™” ํ•ด์ฃผ๊ณ  ํ–ˆ์–ด์•ผ!!
    #ํ˜„์žฌ ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธ ์ฒ˜๋ฆฌ
    visited[start] = True
    #ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
    while queue:
        #ํ์—์„œ ํ•˜๋‚˜์˜ ์›์†Œ๋ฅผ ๋ฝ‘์•„ ์ถœ๋ ฅํ•˜๊ธฐ
        v = queue.popleft()   
        print(v, end = " ")
        #์•„์ง ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ์ธ์ ‘ํ•œ ์›์†Œ๋“ค์„ ํ์— ์‚ฝ์ž…
        for i in graph[v]:   #graph[v]๋Š” ํ˜„์žฌ ๋…ธ๋“œ์˜ ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋“ค์˜ ๋ฆฌ์ŠคํŠธ!
            if visited[i] == False: #๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์€ ๋…ธ๋“œ๋ผ๋ฉด!
                queue.append(i)
                visited[i] = True #ํ์— ๋„ฃ์–ด์ค€ ํ›„ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ํ•ด์ฃผ๋ฉด ๋ผ!

#๊ฐ ๋…ธ๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋œ ์ •๋ณด๋ฅผ ํ‘œํ˜„(2์ฐจ์› ๋ฆฌ์ŠคํŠธ)
graph = [
    [], 
    [2,3,8],
    [1,7],
    [1,4,5],
    [3,5],
    [3,4],
    [7],
    [2,6,8],
    [1,7]
]
#๊ฐ ๋…ธ๋“œ๊ฐ€ ๋ฐฉ๋ฌธ๋œ ์ •๋ณด๋ฅผ ํ‘œํ˜„(1์ฐจ์› ๋ฆฌ์ŠคํŠธ)
visited = [False] * 9  #์ธ๋ฑ์Šค 1๋ถ€ํ„ฐ ํ• ๊บผ๋ผ ํ•œ๊ฐœ ๋”!
#์ •์˜๋œ DFSํ•จ์ˆ˜ ํ˜ธ์ถœ
bfs(graph, 1, visited)

โšฝ DFS & BFS ๋ฌธ์ œ ํ’€์–ด๋ณด๊ธฐ

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/fe7e2d61-d7e1-40c0-8abc-b9fad49d0f06.png

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/ca8f4bbf-1a91-41b0-9c49-665b6179a0c9.png

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/ff1b087e-eaec-43cd-80e0-c9883637281b.png

์ด ๋ฌธ์ œ๋Š” ์„œ๋กœ ์—ฐ๊ฒฐ์š”์†Œ ๊ฐœ์ˆ˜๊ฐ€ ๋ช‡๊ฐœ์ธ์ง€ ๊ตฌํ•˜๋ฉด ๋ผ!

โšฝ ์—ฐ๊ฒฐ์š”์†Œ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ - DFS, BFS (๋ชจ๋‘ ๊ฐ€๋Šฅ)

  • :์—ฐ๊ฒฐ์š”์†Œ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๋Š” ๋ฌธ์ œ๋Š” ๊ฒฐ๊ตญ DFS, BFS ๋‘˜ ์ค‘ ์–ด๋–ค ๊ฑธ๋กœ๋“  ํ’€ ์ˆ˜ ์žˆ๋‹ค.

์ฆ‰ ์ธ์ ‘ํ•œ ๋…ธ๋“œ์˜ ํ˜•ํƒœ๋กœ ๊ทธ๋ž˜ํ”„ ์œ ํ˜•์˜ ๋ฌธ์ œ๋ผ๋Š”๊ฑฐ ํŒŒ์•…ํ–ˆ์–ด์•ผํ•ด โ†’ (DFS BFS๋กœ ํ’€ ์ˆ˜ ์žˆ๊ฒ ๋‹ค..? ๊นŒ์ง€ ์บ์น˜ํ•˜๊ณ  ์ง„ํ–‰ํ•˜์ž)

1๋กœ ์ฒ˜๋ฆฌ๋˜์–ด ์žˆ๋Š” ์นธ์€ ์ธ์ ‘ํ•˜์ง€ ์•Š์•„์„œ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š์„๊บผ์•ผ

๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ๊ฐ€ ์ด๋ฃจ์–ด์ง€๋Š” ์š”์†Œ์— ๋Œ€ํ•ด์„œ๋งŒ ์นด์šดํŒ…ํ•˜๋ฉด ๋œ๋‹ค.

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/6c43c857-d5a5-4ab4-b9be-5df3dcca4bb2.png

๋ฐฉ๋ฌธํ•œ ์ง€์ ์—์„œ ๋‹ค์‹œ ์ƒํ•˜์ขŒ์šฐ๋ฅผ ์‚ดํ”ผ๊ณ  ๋ฐฉ๋ฌธ์„ ์ง„ํ–‰ํ•˜๋Š” ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•˜๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ !

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/75722650-c7e5-46a3-ad3c-e49fbffc10b3.png

์Œ๋ฃŒ์ˆ˜ ์–ผ๋ ค๋จน๊ธฐ ํ•ด๋‹น๋ฌธ์ œ ์†Œ์Šค์ฝ”๋“œ

#์Œ๋ฃŒ์ˆ˜ ์–ผ๋ ค๋จน๊ธฐ
N, M = map(int, input().split())
#DFS๋กœ ํŠน์ • ๋…ธ๋“œ๋ฅผ ๋ฐฉ๋ฌธํ•˜๊ณ  ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๋…ธ๋“œ๋“ค(์ธ์ ‘ํ•œ ๋…ธ๋“œ)๋„ ๋ฐฉ๋ฌธ
def dfs(x,y):
    #์ฃผ์–ด์ง„ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ์—๋Š” ์ฆ‰์‹œ ์ข…๋ฃŒ
    if x <= -1 or x>=N or y <= -1 or y >=M:   #2์ฐจ์› ๋ฆฌ์ŠคํŠธ ๋ฒ”์œ„ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒฝ์šฐ
        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   #์ด๋ฏธ ๋ฐฉ๋ฌธํ–ˆ์œผ๋ฉด False ๋ฆฌํ„ด

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

#๋ชจ๋“  ๋…ธ๋“œ(์œ„์น˜)์— ๋Œ€ํ•ด์„œ ์Œ๋ฃŒ์ˆ˜ ์ฑ„์šฐ๊ธฐ
result = 0
for i in range(N):
    for j in range(M):    #NxM 2์ฐจ์›์—์„œ ์ˆ˜ํ–‰.
        #ํ˜„์žฌ ์œ„์น˜์—์„œ DFS์ˆ˜ํ–‰
        if dfs(i, j) == True:  #dfsํ•œ๋ฒˆ ์ˆ˜ํ–‰ํ•˜๋ฉด ํ•ด๋‹น ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๋…ธ๋“œ๋“ค๋„ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ํ•  ์ˆ˜ ์žˆ๋„๋กํ•จ!!
            result +=1 #ํ•ด๋‹น ๋…ธ๋“œ๋งŒ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ๋˜๋ฉด +1
        #i,jํ•œ๋ฒˆ ๋ฐฉ๋ฌธํ•˜๋ฉด ์ธ์ ‘ํ•œ ๋…ธ๋“œ๋“ค์€ ๋ชจ๋‘ ๋ฐฉ๋ฌธ์ฒ˜๋ฆฌ ๋˜์ž–์•„! ๊ทธ๋ž˜์„œ ์นด์šดํŒ… ํ•œ๋ฒˆ๋งŒ ๋ผ!!!!
print(result)
  • ์ด ๋ฌธ์ œ์ฒ˜๋Ÿผ 0,1 ๋กœ ํ•ด๋‹น ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ๋”ฐ๋กœ ๋ฐฉ๋ฌธ ์ฒดํฌ ๋ฆฌ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•˜์ง„ ์•Š์•„. ๊ทธ ์•ˆ์—์„œ 1๋กœ ๋‹ค์‹œ ์น ํ•ด์ฃผ๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ !!

๐ŸŽˆ ๋ฏธ๋กœํƒˆ์ถœ๋ฌธ์ œ

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/fc13eba5-5313-4c74-8150-244ace85894f.png

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/2fbd03ad-564a-454c-b8e6-0975ddbbd713.png

์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ํ‚ค์›Œ๋“œ

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/66941b19-1551-4465-8165-221147888629.png

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/08a109e3-481b-4b28-9b66-8b20a2ae901a.png

๊ฐ’์ด 1์ธ ๋…ธ๋“œ๋กœ๋งŒ ์ด๋™์ด ๊ฐ€๋Šฅํ•˜๋‹ค๊ณ  ํŒ๋ณ„ํ•˜์—ฌ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๊ตฌํ•  ์ˆ˜ ์žˆ์–ด!

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/cb630684-93b5-44b1-9395-20f9cc4400d7.png

๊ทธ ์ด์œ ๋Š” ์‹œ์ž‘์œ„์น˜์™€ ๋งˆ์ง€๋ง‰ ์œ„์น˜๊นŒ์ง€์˜ ๋…ธ๋“œ๋ฅผ ํฌํ•จ๋˜์–ด์•ผ ํ•ด!

๋งค๋ฒˆ ์ƒˆ๋กœ์šด ์ง€์ ์„ ๋ฐฉ๋ฌธํ•  ๋•Œ ๊ทธ ์ด์ „ ์ง€์ ๊นŒ์ง€์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ์— +1์„ ํ•ด์„œ ๊ธฐ๋ก!

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/2d9c0b7f-28db-4403-899a-304febf5a6cf.png

๊ฒฐ๊ตญ ๋งˆ์ง€๋ง‰์œ„์น˜์— ๊ธฐ๋ก๋˜์–ด ์žˆ๋Š” ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋„๋ก ๋งŒ๋“ค๋ฉด ์ •๋‹ต ํŒ์ •์„ ๋ฐ›์„ ์ˆ˜ ์žˆ์–ด!!

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/5eec689c-041d-4c7c-990d-ed41b092004b.png

๐ŸŽˆ โ€โ€โ€Ž โ€Ž๋ฏธ๋กœํƒˆ์ถœ๋ฌธ์ œ ์†Œ์Šค์ฝ”๋“œ

#๋ฏธ๋กœํƒˆ์ถœ ๋ฌธ์ œ
from re import A
import heapq as hq            #ํž™ํ! ์“ฐ๊ฒ ๋‹ค๋Š” ์†Œ๋ฆฌ
from collections import deque  #๋ฐํฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ ์–ธ!
import sys
sys.stdin = open("input.text", "rt")

#์ด ๋ฌธ์ œ ์—ญ์‹œ ํ–‰, ์—ด์„ ์ถ•์†Œ ์‹œ์ผœ์„œ ๋‚ด๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์œผ๋กœ ๋งŒ๋“ค๊ณ  ์–ด๋–ป๊ฒŒ ๊ตฌ๋™๋˜๋Š”์ง€ ์˜ˆ์ธกํ•ด๋ณด๋ฉด์„œ ํ’€์–ด๋ณด๋Š”๊ฒŒ ์ข‹๋‹ค! 3x3์œผ๋กœ ๋งŒ๋“ค์–ด์„œ ์–ด๋–ป๊ฒŒ ํ•˜๋ฉด ๋ ๊นŒ? ๋ฅผ ์ƒ๊ฐํ•ด๋ดค์–ด์•ผํ•จ!!!
#๋ฏธ๋กœํƒˆ์ถœ NxM
#(1,1) ์‹œ์ž‘, ์ถœ๊ตฌ (N,M) ํ•œ๋ฒˆ์— ํ•œ์นธ์”ฉ
#๊ดด๋ฌผ์ด ์žˆ๋Š” ๊ณณ 0 ๊ดด๋ฌผ์ด ์—†๋Š” ๊ณณ 1๋กœ ํ‘œ์‹œ
#ํƒˆ์ถœํ•˜๊ธฐ ์œ„ํ•ด ์›€์ง์—ฌ์•ผ ํ•˜๋Š” ์ตœ์†Œ ์นธ์˜ ๊ฐœ์ˆ˜ ๊ตฌํ•˜๊ธฐ
# ์ด ๋ฌธ์ œ๋Š” BFS!! BFS๋Š” ๊ฐ„์„ ์˜ ๋น„์šฉ์ด ๊ฐ™์„ ๋•Œ ์ตœ๋‹จ๊ฑฐ๋ฆฌ๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด์•ผ!
#์‹œ์ž‘์ง€์ ์—์„œ ๊ฐ€๊นŒ์šด ๋…ธ๋“œ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ!
#์ด๋•Œ ์ƒํ™ฉ์ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ๋…ธ๋“œ๋Š” ์ด๋™์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ๋ฆฌ๊ฐ€ 1๋กœ ๋™์ผ
#๊ฐ€์žฅ ์™ผ์ชฝ ์œ„ ์ง€์ ์˜ (1,1)์—์„œ bfs๋ฅผ ์ˆ˜ํ–‰ํ•ด์„œ ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•œ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๊ฐ’์„ ๊ธฐ๋กํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ
#์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ž‘์„ฑํ•˜๋ฉด ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ
N, M = map(int, input().split())
graph = []   #์ด ๋ฌธ์ œ๊ฐ€ ์™œ ๊ทธ๋ž˜ํ”„ ๋ฌธ์ œ์ธ์ง€ ์ƒ๊ฐ --> ์ธ์ ‘ํ•œ ์œ„์น˜์˜ ์ •๋ณด ๋•Œ๋ฌธ..?
for i in range(N):
    graph.append(list(map(int, input()))) #๋ฌธ์ž์—ด๋กœ ์ˆซ์ž ์ž…๋ ฅํ•œ๊ฑฐ ์ „๋ถ€ ์ •์ˆ˜๋กœ ๋ฐ”๊ฟ”์„œ ๋ฆฌ์ŠคํŠธํ™”! ์ด๋Ÿฌ๋ฉด ๊ฐ๊ฐ์˜ ์ˆซ์ž๋ฅผ ์ธ๋ฑ์Šค๋กœ ์ ‘๊ทผ๊ฐ€๋Šฅ

#1์ธ๊ณณ๋งŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ์ž–์•„. ์ด๋™ํ•  ๋ฐฉํ–ฅ ํ•„์š”
#์ด๋™ํ•  ๋„ค ๊ฐ€์ง€ ๋ฐฉํ–ฅ ์ •์˜(์ƒ ํ•˜ ์ขŒ ์šฐ) --> ๋ฐฉํ–ฅ๋ฒกํ„ฐ ์ •์˜!
dx = [-1,1,0,0]
dy = [0,0,-1,1]

#BFS ์†Œ์Šค์ฝ”๋“œ ๊ตฌํ˜„
def bfs(x,y):  #ํ–‰ ์—ด   ,   bfs๋Š” ํ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š”๊ฑฐ ์žŠ์ง€๋ง๊ณ 
    #ํ(queue) ๊ตฌํ˜„์„ ์œ„ํ•ด deque ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ
    queue = deque()
    queue.append((x,y)) #x,y์˜ ํŠœํ”Œ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€  ์ฒ˜์Œ x,y๋Š” 0,0 ์ฆ‰ ํ–‰์—ด์˜ ์œ„์น˜๋ฅผ ํ†ตํ•ด...
    #ํ๊ฐ€ ๋นŒ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
    while queue:
        x,y = queue.popleft()
        #ํ˜„์žฌ ์œ„์น˜์—์„œ 4๊ฐ€์ง€ ๋ฐฉํ–ฅ์œผ๋กœ์˜ ์œ„์น˜ ํ™•์ธ
        for i in range(4):
            nx = x + dx[i]
            ny = y + dy[i]
            #๋ฏธ๋กœ ์ฐพ๊ธฐ ๊ณต๊ฐ„์„ ๋ฒ—์–ด๋‚œ ๊ฒฝ์šฐ ๋ฌด์‹œ. ์ฆ‰ ์ธ๋ฑ์Šค ์˜ค๋ฅ˜์ธ ๊ฒฝ์šฐ
            if nx < 0 or nx >= N or ny < 0 or ny >= M:
                continue
            #๊ดด๋ฌผ์ด ์žˆ๋Š” ๊ณณ์ธ ๊ฒฝ์šฐ ๋ฌด์‹œ
            if graph[nx][ny] == 0:
                continue
            #ํ•ด๋‹น ๋…ธ๋“œ๋ฅผ ์ฒ˜์Œ ๋ฐฉ๋ฌธํ•˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๊ธฐ๋ก.
            if graph[nx][ny] == 1:
                graph[nx][ny] = graph[x][y] + 1  #๋ฐ”๋กœ ์ง์ „ ๋…ธ๋“œ์—์„œ์˜ ์ตœ๋‹จ๊ฑฐ๋ฆฌ ๊ฐ’์— 1์„ ๋”ํ•ด
                queue.append((nx,ny))  #์ด๊ฑธ ์ถ”๊ฐ€!
        
        #๊ฐ€์žฅ ์˜ค๋ฅธ์ชฝ ์•„๋ž˜๊นŒ์ง€์˜ ์ตœ๋‹จ ๊ฑฐ๋ฆฌ ๋ฐ˜ํ™˜
    return graph[N-1][M-1]

#BFS๋ฅผ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ ์ถœ๋ ฅ
print(bfs(0,0))

โ€โ€โ€Ž โ€Ž


โšฝ ์ถ”๊ฐ€์ ์œผ๋กœ DFS/BFS ๋‚ด์šฉ ๋ฐ ๋งˆ์ธ๋“œ์…‹ ์ •๋ฆฌ

DFS์—์„œ๋Š” ๊นŠ์ด์šฐ์„ ! ์ฆ‰ ๋”์ด์ƒ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๋Š” ๋ง๋‹จ๋…ธ๋“œ๊นŒ์ง€ ๋จผ์ € ๊ฐ€๋Š” ๊ตฌ์กฐ์˜€๋Š”๋ฐ

BFS๋Š” ๋„“์ด์šฐ์„  ํƒ์ƒ‰! โ†’ ๋ ˆ๋ฒจ ํƒ์ƒ‰์„ ํ•ด

์ด์ง„ํŠธ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ดํ•ดํ•ด๋ณด์ž

0๋ ˆ๋ฒจ์—์„œ ํ•œ๋ฒˆ ๋งŒ์— ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค. ์ฆ‰ 1๋ ˆ๋ฒจ์˜ ๋…ธ๋“œ๋“ค (๋ฐ”๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ณณ์œผ๋กœ ์ด๋™)

2๋ ˆ๋ฒจ ์• ๋“ค์€ 0๋ฒˆ์—์„œ 2๋ฒˆ๋งŒ์— ๊ฐ€์ž–์•„

0๋ ˆ๋ฒจ -> 1๋ ˆ๋ฒจ -> 2๋ ˆ๋ฒจ -> .... ์ด๋Ÿฐ ์‹์œผ๋กœ ๋ฐฉ๋ฌธ์„ ์ง„ํ–‰

https://slid-users-assets-v1-seoul.s3.ap-northeast-2.amazonaws.com/public/capture_images/70a7ce531e76477ab88e37d04769bffd/711fc049-2b8d-4673-b299-203f3ac3cf6b.png

BFS๋ฅผ ๊ตฌํ˜„ ํ•˜๋ ค๋ฉด ํ๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•ด! ๋จผ์ € ๋“ค์–ด๊ฐ„๊ฒŒ ๋จผ์ € ๋‚˜์™€.

์ตœ์ดˆ์˜ ํ์— ๋ฃจํŠธ๋…ธ๋“œ 0๋ฒˆ์„ ๋„ฃ๊ณ  ์‹œ์ž‘ํ•ด! (๋ฃจํŠธ๋…ธ๋“œ pop() ํ•˜๋ฉด์„œ ์‹œ์ž‘ํ•˜๋Š”๊ฒŒ BFS)

๊ทธ๋ฆฌ๊ณ  0๋ฒˆ์„ popํ•ด์„œ ๋‚˜์˜ค๋ฉด 0๋ฒˆ๊ณผ ์—ฐ๊ฒฐ๋œ ํ•œ๋ฒˆ์˜ ๊ฐ„์„ ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ๋“ค(์ธ์ ‘๋…ธ๋“œ)์„ ๋ชจ๋‘ ํ์— ๋„ฃ๊ธฐ(ํ์— ๋“ค์–ด๊ฐ”๋‹ค๋ฉด ํƒ์ƒ‰์ด๋ผ๊ณ  ๋ด์•ผํ•ด)

์—ฐ๊ฒฐ๋œ๊ฑธ ๋‹ค ๋„ฃ์—ˆ๋‹ค๋ฉด ํ์—์„œ popํ•˜๋‚˜ ํ•ด์„œ ๊ทธ ๋…ธ๋“œ์™€ ์—ฐ๊ฒฐ๋œ ํ•œ๋ฒˆ์˜ ๊ฐ„์„ ์œผ๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ๋“ค(์ธ์ ‘๋…ธ๋“œ)์„ ๋‹ค์‹œ ํ์— ๋„ฃ์–ด! ๋‹ค ๋„ฃ์—ˆ์œผ๋ฉด ๋˜ popํ•ด์„œ ๋‹ค์‹œ...์ด ๊ณผ์ • ๋ฐ˜๋ณตํ•ด!!!!

๋ฌผ๋ก  ์žฌ๋ฐฉ๋ฌธ ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ ์ค‘๋ณต์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋ฆฌ์ŠคํŠธ ํ•„์š”ํ•ด

์™œ๋ƒ๋ฉด ๊ณ„์† ํ•œ๋ฒˆ๋งŒ์— ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ๋“ค์„ ๊ณ„์† ์ถ”๊ฐ€ํ•˜๋ฉด ๋ฌดํ•œ๋ฃจํ”„์— ๋น ์ง€๊ธฐ ๋•Œ๋ฌธ!

DFS/BFS ๋ฌธ์ œ๋Š” ์ƒํƒœํŠธ๋ฆฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋ป—์–ด๋‚˜๊ฐ€๋Š”์ง€๋ฅผ ์ž˜ ํŒŒ์•…ํ•˜๋ฉด ๋ฌธ์ œ๋ฅผ ํ‘ธ๋Š”๋ฐ ์–ด๋ ค์›€์ด ์—†์„๊บผ์•ผ



profile
back-end, ์ง€์† ์„ฑ์žฅ ๊ฐ€๋Šฅํ•œ ๊ฐœ๋ฐœ์ž๋ฅผ ํ–ฅํ•˜์—ฌ

0๊ฐœ์˜ ๋Œ“๊ธ€