intro
๐ฃ๏ธ ๊ทธ๋ํ์์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ์๋ค. ๋ค์ต์คํธ๋ผ, ํ๋ก์ด๋-์์ , ๋ฒจ๋ง-ํฌ๋์ ๊ฐ์ ์ ๋ช ํ ์ต๋จ๊ฑฐ๋ฆฌ TOP 3 ์๊ณ ๋ฆฌ์ฆ์ด ์กด์ฌํ๋๋ฐ, ๊ฐ์ ์ ๊ฐ์ค์น๊ฐ ์ ํ ์๋, ์ฃผ์ด์ง ์ผ๋ฐ์ ์ธ ๊ทธ๋ํ์์์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ฐฉ๋ฒ์ BFS๊ฐ best. ์ด๋ฒ ํฌ์คํ ์ ํตํด ์ฃผ์ด์ง ๊ทธ๋ํ์์ BFS๋ฅผ ์ฌ์ฉํด ์ต๋จ๊ฑฐ๋ฆฌ ๊ตฌํ๊ธฐ์ ์ต๋จ๊ฑฐ๋ฆฌ ๋ด์ฉ ์ถ๋ ฅ๊น์ง ์์๋ณธ๋ค.
DFS๋ ์๋๊ณ BFS๋ ๊ฐ๋ฅํ ์ด์ ?
๐ฃ๏ธ ๊ทธ๋ํ ์ํ์ ๋ํ์ ์ธ 2๊ฐ์ง ๋ฐฉ๋ฒ์ผ๋ก๋ DFS, BFS๊ฐ ์๋ค. ๊ทธ๋ฌ๋ shortest path in an unweighted graph๋ฅผ ์ฐพ๊ธฐ ์ํด์๋ DFS๋ณด๋ค๋ BFS ๋ฐฉ์์ ์ ๊ทน ๊ถ์ฅ. ์ ๊ทผ ๋ฐฉ์์ ์ฐจ์ด๊ฐ ์๊ธฐ ๋๋ฌธ์ด๋ค.
: BFS์ ๊ฒฝ์ฐ level-wise exploration ํํ๋ก ๊ทธ๋ํ ๋ ๋ฒจ๋ณ๋ก ํ์์ ์์ํ๋ค. ์ฆ, ์์๋ ธ๋๋ก๋ถํฐ d ๊ฑฐ๋ฆฌ์ ์๋ ๋ชจ๋ ๋ ธ๋๋ (d+1) ๊ฑฐ๋ฆฌ์ ์๋ ๊ทธ ์ด๋ค ๋ ธ๋๋ฅผ ํ์ํ๊ธฐ์ ์์์ ๋ชจ๋ ํ์๋๊ธฐ ๋๋ฌธ. ์ฆ, BFS๊ฐ ์ฒ์์ผ๋ก ํ ๋ ธ๋์ ๋๋ฌํ ๋, ํด๋น ๋ ธ๋๊น์ง์ ๋๋ฌ shortest path๋ฅผ ๊ตฌํ ์ . ์ถ๊ฐ๋ก BFS๋ queue ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ฏ๋ก, ๋จผ์ ๋ฐฉ๋ฌธํ ๋ ธ๋๋ถํฐ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ํด๋น ๋ ธ๋๊น์ง ๋๋ฌํ๋ path๋ shortestํ๋ค๋ ์ ๋ guarantee๋จ.
: ๋ฐ๋ฉด์ DFS์ ๊ฒฝ์ฐ depth-wise exploration ๋ฐฉ์์ผ๋ก ๋จผ์ ๋ฅํ๊ฒ ๋์ค์ traversal process์์ ๋ฐ๊ฒฌ๋๋ shorter path๊ฐ ์์ ์ ์๋ค.
BFS์ depth๊ฐ ๊ณง ์ต๋จ๊ฑฐ๋ฆฌ๋ค
๐ฃ๏ธ node A์ BFS์ depth๋ ๊ณง starting node๋ถํฐ node A๊น์ง์ edges(๊ฐ์ ) ๊ฐ์์ด๋ค. (์๋ ๊ทธ๋ฆผ ์ฐธ์กฐ)
: ์ ๊ทธ๋ฆผ์ ๋ณด๋ฉด node D์ depth๋ starting node A๋ถํฐ node D๊น์ง์ ๊ฐ์ ์ ๊ฐ์๋ก, 2์์ ์ ์ ์๋ค. (source node๋ฅผ level 0 ๊ฐ์ )
๐ฃ๏ธ ๊ทธ๋ ๋ค๋ฉด ํด๋น node D์ ์ต๋จ๊ฑฐ๋ฆฌ(starting node A๋ถํฐ ์์)๋ 2์์ ์ด๋ป๊ฒ ์ฆ๋ช ํ ์ ์์๊น? ์๋ ๋ช ์ ๋ฅผ ๋จผ์ ์ฆ๋ช ํด๋ณด์
" ๊ฐ์ (U,V)๋ฅผ ํตํด์ ์ ์ V๋ฅผ ์ฒ์ ๋ฐ๊ฒฌํด queue์ ๋ฃ์๋ค๊ณ ๊ฐ์ . ์ด ๋ ์์์ (source node S)์์ ์ ์ V๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ dist(S,V)๋ ์์์ ์์ ์ ์ U๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ dist(S,U) + 1์ด๋ค" → "dist(S,V) = dist(S,U) + 1"
โ dist(S,V) > dist(S,U) + 1
: ์๋ช ํ๋ค. S์์ U๊น์ง์ ๊ฒฝ๋ก์์ ๊ฐ์ (U,V)๋ก 1๊ฐ๋ฅผ ๋ ๋ถ์ด๋ฉด dist(S,V)๊ฐ dist(S,U) + 1์ด ๋ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.
โก dist(S,V) < dist(S,U) + 1
: V๊น์ง์ ๊ฑฐ๋ฆฌ๊ฐ U ๊น์ง์ ๊ฑฐ๋ฆฌ + 1๋ณด๋ค ์งง๋ค๊ณ ๊ฐ์ . ๊ทธ๋ ๋ค๋ฉด ์งง๋ค๊ณ ๊ฐ์ ํ ํด๋น ๊ฒฝ๋ก ์์์ V ๋ ธ๋ ๋ฐ๋ก ์ด์ ์ ์ ์ ์ ๋น์ฐํ U๊น์ง์ ๊ฑฐ๋ฆฌ๋ณด๋ค ์์์ผ ํ๋ค. V ๋ ธ๋ ๋ฐ๋ก ์ด์ ์ ์ ์ ์ P๋ผ๊ณ ํ๋ค๋ฉด, dist(S,P) = dist(S,V) - 1์ด๋ฏ๋ก, ์๋์ ๊ฐ์ด ๋ถ๋ฑ์์ ๋ํ๋ผ ์ ์๋ค.
dist(S,V) < dist(S,U) + 1 & dist(S,P) = dist(S,V) - 1 ↔ dist(S,P) < dist(S,U) + 1 - 1 = dist(S,U)
๋ฐ๋ผ์, dist(S,P) < dist(S,U)์ ๊ฐ์ ์์ด ์์ฑ๋๋ค. ์ฆ ํด๋น ์์ ํตํด ์ฐ๋ฆฌ๋ BFS ํ์ ์๊ณ ๋ฆฌ์ฆ ์ ๋ ธ๋ P๋ฅผ ๋ ธ๋ U๋ณด๋ค ์ฐ์ ๋ฐฉ๋ฌธํ์์ ์ ์ ์๋ค. ์ด ๋ ๋ ธ๋ P๋ ๋ ธ๋ V ๋ฐ๋ก ์ด์ ์ ์ ์ ์ผ๋ก, ์ข ํฉํ๋ฉด ๋ ธ๋ P๋ฅผ ๋ฐฉ๋ฌธ ํ ๋ ธ๋ V๋ฅผ ๋ฐฉ๋ฌธํ๊ฒ ๋๋ค. ๊ทธ๋ฐ๋ฐ ๋ ธ๋ U๋ณด๋ค ๋ ธ๋ P๋ฅผ ์ฐ์ ๋ฐฉ๋ฌธํ์์ ๋์ถํ์ผ๋ฏ๋ก (1) ๋ ธ๋ U๋ ๋ ธ๋ V์ ๊ฐ์ ๋ ๋ฒจ(depth)์ ์๊ฑฐ๋, (2) ๋ ธ๋ V ๋ฐฉ๋ฌธ ํ ๋ ธ๋ U๋ฅผ ๋ฐฉ๋ฌธํ๋ ๋ ์ผ์ด์ค๋ก ๋๋ ์ ์๋ค. ํ์ง๋ง ๊ฐ์ (U,V)๋ฅผ ํตํด ์ (1)๊ณผ (2)๋ ๋ชจ๋ ๋ชจ์์์ ์ ์ ์์ผ๋ฏ๋ก ๊ท๋ฅ๋ฒ์ ์ํด โก๋ False.
→ ๋ฐ๋ผ์, ๊ฐ์ (U,V)๊ฐ ์กด์ฌํ๋ค๋ฉด dist(S,V)๋ dist(S,U) + 1์์ ์ ์ ์๋ค. (dist(X,Y) = ์ ์ X์์ ์ ์ Y๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ)
๐ฃ๏ธ ๋ฐ๋ผ์ ์๋ฅผ ๋ค์ด ๋ ธ๋ A์์ ๋ ธ๋ D๊น์ง์ ์ต๋จ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๊ณ ์ถ๋ค๋ฉด ๋ ธ๋ A์์ ์์ํด BFS๋ฅผ ํ์ํด ๋ ธ๋ D๊น์ง์ depth๊ฐ ์ต๋จ๊ฑฐ๋ฆฌ(๋ ธ๋ A์ depth 0 ๊ฐ์ )
Shortest Path BFS code
๐ฃ๏ธ ์์ด๋์ด:
(1) ์๋์ BFS ์ฝ๋์์ ๊ฐ ๋ ธ๋๋ณ(1๋ฒ ๋ ธ๋ ~ N๋ฒ ๋ณด๋) depth๊ฐ ์ ์ฅ๋ 1์ฐจ์ list ๋ง๋ค๊ธฐ(-1๋ก ์ฒ์์ ๋ชจ๋ ์ด๊ธฐํ)
(2) ์์ ๋ ธ๋ depth 0 ์ค์
(3) queue ๋๋ฉด์ popleft()๋ก ๋บ ๋ ธ๋์ ์ธ์ ๋ ธ๋ for๋ฌธ ์ค ํน์ ๋ ธ๋ ์ฒซ ๋ฐฉ๋ฌธ ์, ์๋ ๋ ธ๋ depth์ 1์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ depth์ ์ ์ฅ
(4) ์ต์ข ์ ์ผ๋ก ๊ตฌํ depths list์์ ๋์ฐฉ ๋ ธ๋์์์ depth ์ถ๋ ฅํ๋ฉด ์์์ ์์ ๋์ฐฉ์ ๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ ์ถ๋ ฅ
Shortest Path ๋ด์ฉ & ๊ฐ์ ๊ตฌํ๊ธฐ
โ Shortest Path ์ต๋จ๊ฑฐ๋ฆฌ ๋ ธ๋ ๋ฒํธ ๊ตฌํ๊ธฐ
: ๋จ์ํ ์ต๋จ๊ฑฐ๋ฆฌ๊ฐ ๋ช์ธ์ง๋ฅผ ๋ฌผ์ด๋ณด๋๊ฒ ์๋๋ผ, ์ต๋จ๊ฑฐ๋ฆฌ์ ๋ด์ฉ(๋ ธ๋ ๋ฒํธ)์ ๋ฌผ์ด๋ณด๋ ์ ํ๋ ์กด์ฌ. path list๋ฅผ ๋ง๋ ๋ค(A), A[3]์ 3๋ฒ node๋ฅผ ์์ node๋ก ํ๋ ๋ถ๋ชจ node ๋ฒํธ๋ฅผ ์ ์ฅ. ์๋ฅผ ๋ค์ด ์๋์ ๊ฐ์ ๊ทธ๋ํ๋ฅผ BFS๋ก ํ์ํ๋ค๋ฉด,
ex) 1๋ฒ ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋ ๋ฒํธ๋ 2์ด๋ฏ๋ก path[1] = 2, 2๋ฒ ๋ ธ๋์ ๋ถ๋ชจ ๋ฒํธ ๋ ธ๋๋ 3์ด๋ฏ๋ก path[2] = 3 ~ ์ด๋ ๊ฒ ์งํ๋๋ค. ์์ node์ ๋ถ๋ชจ ๋ฒํธ node๋ 0์ผ๋ก ์ค์ (path[5] = 0). ๋ฐ๋ผ์ ๋์ฐฉ์ ์์์ node๋ถํฐ ์ญ์ถ์ ์ผ๋ก path list๋ฅผ ์งํํด path[5] = 0 ๊ฒฐ๋ก ์ด ๋ ๋๊น์ง ์ญ์ถ์ ๊ฒฝ๋ก๋ฅผ ์ถ๋ ฅํ๋ค.
โก Shortest Path ์ต๋จ๊ฑฐ๋ฆฌ์ ๊ฐฏ์๋ฅผ ์ถ๊ฐ๋ก ๊ตฌํ ์ ์๋ค.
ex) 1์์ 6๊น์ง ๊ฐ๋ ์ต๋จ๊ฑฐ๋ฆฌ์ ๊ฐฏ์๋ฅผ ๊ตฌํด๋ณด์. ์ด ๋ parent node๋ฅผ v๋ผ ํ๋ฉด ๋ป์ ์ ์๋ ๊ฒฝ๋ก์ ๊ฐ์๋ v-1, v+1, 2*v ์ธ ๊ฐ์ง์.
(1) ์ฃผ์ด์ง ์ซ์ ๋ฒ์ ์๋ child node ์ ์ธ(๋ ธ๋์ X)
(2) ex) ํ์ฌ node์์ v-1, v+1, 2*v๋ก ๋ป์์ ๋(BFS ํ์)
โ child node๊ฐ ๋ชฉํ node๊ฐ ์๋ ๊ฒฝ์ฐ
[1] child node๋ฅผ ๋ฐฉ๋ฌธํ์ง ์์ ์๋ก์ด node (์ ๊ทธ๋ฆผ ๋ณด๋ผ์) : depths update, visited True ์ค์ , queue์ ๋ฃ๊ธฐ
[2] child node๋ฅผ ์ด๋ฏธ ๋ฐฉ๋ฌธํ node(ex ์์ ๊ทธ๋ฆผ์ ๊ฒฝ์ฐ depth 1์์ 2๋ก ๋ป์ ๋ node number 2) (์ ๊ทธ๋ฆผ ์ด๋ก์) : ๋์ผํ number์ node๋ ๋์ผ depth์ ์์ ๋๋ง ์ดํ ํ์ ๊ฐ๋ฅํ๊ณ , ์ด๋ฏธ ์ด์ depth์ ์กด์ฌํ๋ค๋ฉด pass
→ ๋ฐ๋ผ์ depths[child] == depths[v] + 1์ผ ๊ฒฝ์ฐ๋ง depths update, queue์ ๋ฃ๊ธฐ
โก child node๊ฐ ๋ชฉํ node์ธ ๊ฒฝ์ฐ
[1] ์ฒซ ๋ชฉํ node ๋๋ฌ์ด๋ผ๋ฉด(found == False) (์ ๊ทธ๋ฆผ ๋นจ๊ฐ์): depths update, visited True ์ค์ , queue์ ๋ฃ๊ธฐ, found = True, found_depth ์ค์ , cnt(์ ๋ต๋ณ์) += 1
[2] ์ด๋ฏธ ๋๋ฌํ ์ ์ด ์๋ค๋ฉด (์ ๊ทธ๋ฆผ ๋ ธ๋์): found_depth == depths[v] + 1์ผ ๊ฒฝ์ฐ๋ง cnt += 1
+ return ์ข ๋ฃ ์ฝ๋ ๋ฃ๊ธฐ +
โ child node๊ฐ ๋ชฉํ node๊ฐ ์๋ ๊ฒฝ์ฐ
[1] child node๋ฅผ ๋ฐฉ๋ฌธํ์ง ์์ ์๋ก์ด node์ธ ๊ฒฝ์ฐ(์ ๊ทธ๋ฆผ ๋ณด๋ผ์)
: if found ๋ต ์ฐพ์๋ค๋ฉด → found_depth๋ณด๋ค ํ์ฌ depth[child]๊ฐ ๋ ํฌ๋ค๋ฉด, return ์ข ๋ฃ(๊ทธ ๋ค์ depth๋ก ์งํ๋ ๊ฒ์ด๋ฏ๋ก)
[2] child node๋ฅผ ์ด๋ฏธ ๋ฐฉ๋ฌธํ node์ธ ๊ฒฝ์ฐ(์ ๊ทธ๋ฆผ ์ด๋ก์)
: ๋์ผํ number์ node๊ฐ ๋์ผ depth์ ์์ ๊ฒฝ์ฐ → if found ๋ต ์ฐพ์๋ค๋ฉด → found_depth๋ณด๋ค ํ์ฌ depth[child]๊ฐ ๋ ํฌ๋ค๋ฉด, return ์ข ๋ฃ(๊ทธ ๋ค์ depth๋ก ์งํ๋ ๊ฒ์ด๋ฏ๋ก)
โก child node๊ฐ ๋ชฉํ node์ธ ๊ฒฝ์ฐ
[1] ์ฒ์์ผ๋ก ๋๋ฌ(์ ๊ทธ๋ฆผ ๋นจ๊ฐ์)
: return x
[2] ์ด๋ฏธ ๋๋ฌํ ์ ์๋ ๊ฒฝ์ฐ(์ ๊ทธ๋ฆผ ๋ ธ๋์)
: ์ด๋ฏธ ์ฐพ์ found_depth์ ํ์ฌ depth(depths[v]+1)์ ์๋ก ๊ฐ์ง ์๋ค๋ฉด, return ์ข ๋ฃ
โป ์ต๋จ๊ฒฝ๋ก ๊ฐฏ์ ํต์ฌ์, found bool flag ๋ณ์๋ฅผ ๋ง๋ ๋ค,
์ฒ์์ผ๋ก ๋๋ฌํ์ง ์์ ๊ฒฝ์ฐ(found==True)์ผ ๋ ์ฒ์์ผ๋ก ๋๋ฌํ์ ๋์ node depth(found_depth)์ ํ์ฌ depth๋ฅผ ๋น๊ต. ์ฆ depth๋ฅผ ๋น๊ตํ๋ฉด์ ์ต๋จ๊ฒฝ๋ก ๊ฐฏ์๋ฅผ updateํ๋ฉด ๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ฌ depth๊ฐ found_depth๋ฅผ ๋์ด์ฐ์ผ๋ฉด return ์ข ๋ฃ โป
Shortest Path Exercises
examples
โ <BOJ S2 16953 A → B> โ
: ์ ์ A๋ฅผ B๋ก ๋ฐ๊พธ๊ธฐ ์ํด ํ์ํ ์ฐ์ฐ ํ์์ ์ต์๊ฐ ๊ตฌํ๊ธฐ. BFS ์ต๋จ๊ฑฐ๋ฆฌ ์ ํ์์ ์์์ฐจ๋ฆฌ๋ ๊ฒ ์ค์. 2๋ฅผ ๊ณฑํ ๊ฒฝ์ฐ์ 1์ ๋ถ์ธ ๋ ๊ฐ๋๋ฅผ BFS ๋ฐฉ์์ผ๋ก depth ๋ณ๋ก ๋ป์ด ๋๊ฐ๋ฉด์ ์ต์ ๊ฐ์ ์ ํ์(์ต์ depth)๋ก ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋ฉด ๋ฐ๋ก depth๋ฅผ ์ต๋จ๊ฑฐ๋ฆฌ๋ก ์ถ๋ ฅ
โ <BOJ S2 1644 ์ด์๊ณ์ฐ> โ
: ๊ฐ์กฑ์ ์ด์๋ BFS์ depth์์ ์ธ์งํ๋ฉด ๋ฐ๋ก ํ๋ฆผ
โ <BOJ S1 1697 ์จ๋ฐ๊ผญ์ง> โ
: ์ 16953 ๋ฌธ์ ์ ๋์ผ. X-1, X+1, 2*X ์ธ ๊ฐ๋๋ก ๊ฐ์ ๋ป์ด๋๊ฐ๊ธฐ
โ <BOJ S1 7562 ๋์ดํธ์ ์ด๋> โ
: ์ญ์ ๋์ผ. ๋์ดํธ์ ์ต์ ์ด๋ ํ์ BFS์ depth๋ก ๊ตฌํ๊ธฐ
โ <BOJ S1 5014 ์คํํธ๋งํฌ> โ
: ์ญ์ ๋์ผ. ๋จ, 1์ฐจ์ ๋ฐฐ์ด์์์ BFS depth ๊ตฌํ๊ธฐ
โ <BOJ S1 2178 ๋ฏธ๋ก ํ์> โ
: ์ญ์ ๋์ผ. ์์์ ๊ณผ ๋์ฐฉ์ ์ด ์ฃผ์ด์ง ์ํ์์, ์์์ ์์ ๋์ฐฉ์ ๊น์ง ๊ฐ ์ ์๋ ์ต๋จ๊ฑฐ๋ฆฌ ๊ตฌํ๊ธฐ
โ <BOJ S1 16948 ๋ฐ์ค ๋์ดํธ> โ
: ์ญ์ ๋์ผ. ๋จ, ์์ง์ด๋ ๋ฐฉํฅ์ด ๋ฌด๋ ค 6๋ฐฉํฅ์ธ ์ ๋ง ์์งํ๋ฉด ๋
โ <BOJ S1 14940 ์ฌ์ด ์ต๋จ๊ฑฐ๋ฆฌ> โ
: ๋์ผ. ๋ค๋ง ๊ทธ๋ํ์ ๋๋ฌ ๋ชปํ๋ ์ง์ ์ด ์๋ ์กฐ๊ฑด ์ถ๊ฐ
โ <BOJ S2 17086 ์๊ธฐ ์์ด2> โ
: ๋จ์ํ brute-force๋ก ํ๋ฆฌ๋ ๋ฌธ์ . ํ์ง๋ง BFS ๊ด์ ์ผ๋ก ํผ๋ค๋ฉด, ์ฌ๋ฌ ์์ด์์ ์์ ๊ฑฐ๋ฆฌ ์ต์๊ฐ์ ๊ตฌํด์ผ ํ๋ฏ๋ก, ์๊ธฐ ์์ด ๊ฐ๊ฐ ์์์ ์ผ๋ก depth update. ์ต์๊ฐ์ด๋ฏ๋ก ๊ธฐ์กด depth๋ณด๋ค ์์ ๋๋ง update. depth ๊ด์ ์์ด๋์ด ์๊ฐํด์ผ ํ ๋ฌธ์
โ <BOJ G5 7576 ํ ๋งํ > โ
: ์์์ ์ด ์ฌ๋ฌ ๊ฐ์์ ์์ํ๋ BFS ์ต๋จ๊ฑฐ๋ฆฌ ๊ต๊ณผ์ ์ ํ
โ <BOJ G5 7569 ํ ๋งํ > โ
: ๋์ด๊น์ง ์กด์ฌํ๋, 7576์ 3์ฐจ์ ๋ฒ์ . ๋ฐฉํฅ๋ฒกํฐ๊ฐ dx, dy, dz ์ธ ๊ฐ ์กด์ฌ. ๋ฐฉํฅ์ 6๊ฐ์ง ์ฃผ์
โ <BOJ G5 1240 ๋ ธ๋ ์ฌ์ด์ ๊ฑฐ๋ฆฌ> โ
: ์ต๋จ๊ฑฐ๋ฆฌ ๋ณํ ๋ฌธ์ . ๊ฐ ๊ฐ์ ๋ง๋ค ๊ฑฐ๋ฆฌ๊ฐ ์กด์ฌํด์, BFS๋ฅผ ๋๋ฆฌ๋ฉด์ ์ ๋ฐ์ดํธ ๋๋ ๊ฑฐ๋ฆฌ๋ฅผ queue์ ๊ฐ์ด ๋๋ฆฌ๋ฉฐ depth update.
โ <BOJ G5 13539 ์จ๋ฐ๊ผญ์ง 3> โ
: BFS๋ฅผ ์งํํ๋, ์ฐ์ ์์๊ฐ ์กด์ฌํ๋ ๊ฐ์ ์ด ์๋ ์ ํ. ๋ฐ๋ผ์ ์ฐ์ ์์๊ฐ ์๋ ๊ฐ์ ๋ฐฉํฅ ์งํ์ ๋จผ์ queue์ popleft()ํ๊ณ append()
โ <BOJ G4 13913 ์จ๋ฐ๊ผญ์ง 4> โ
: ์ต๋จ๊ฑฐ๋ฆฌ ๋ด์ฉ๊น์ง ์ญ์ถ์ ํ๋ ๋ฌธ์ .
โ <BOJ G5 16928 ๋ฑ๊ณผ ์ฌ๋ค๋ฆฌ ๊ฒ์> โ
: ๋ ธ๋์์ ๋ ธ๋๋ก ๋จ์จ์ ์ด๋ํ๋ ๊ฒฝ๋ก๋ฅผ ์ถ๊ฐ๋ก ๊ณ ๋ ค
โ <BOJ G4 9019 DSLR> โ
: BFS ์ต๋จ๊ฑฐ๋ฆฌ ์ ํ์์ ์๊ณ , queue์ ๋ ธ๋๋ฒํธ + ํด๋น๋ ธ๋๋ด์ฉ ์ด๋ ๊ฒ 2๊ฐ๋ฅผ ๋ฃ๋๋ค๋ ์ ๋ง ๊ธฐ์ต
โ <BOJ G4 1963 ์์๊ฒฝ๋ก> โ
: BFS์์ ์๊ณ ์์ ์ฑ์ง๋ง ์ถ๊ฐ๋ ๋ฌธ์
โ <BOJ G4 12851 ์จ๋ฐ๊ผญ์ง 2> โ
: ์ต๋จ๊ฑฐ๋ฆฌ์ ๊ฐ์ง์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ (depth ํ์ฉ)
'Computer Science > Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๐ฒ Divide&Conquer (1) | 2024.06.08 |
---|---|
๐ Power by Divide and Conquer (1) | 2024.06.06 |
โ Flood Fill (0) | 2024.05.19 |
๐๏ธEuler Sieve (1) | 2024.04.21 |
๐ฅCounting Sort (0) | 2024.04.17 |
๋๊ธ