220512_w4_DFS BFS - Sunny-W-Park/elice-sw2-algorithms GitHub Wiki
๋ฐ์ ์ฐ - #2636 ์น์ฆ
๋ฌธ์ ํด์
- M, N: ์น์ฆ ํ์ ์ธ๋ก, ๊ฐ๋ก ๊ธธ์ด
- 1์๊ฐ์ด ์ง๋ ๋๋ง๋ค 1๋ก ํ์๋ ๊ตฌ์ญ์ ๊ฒฝ๊ณ๊ฐ 0์ผ๋ก ๋ฐ๋
- 1์ด ๋ชจ๋ 0์ด ๋ ๋๊น์ง ๋ช์๊ฐ์ด ๊ฑธ๋ฆฌ๋์ง, ๋ชจ๋ 0์ด ๋๊ธฐ ์ ์ ๋จ์์๋ 1์ด ๋ช๊ฐ์ธ์ง ๊ตฌํ๊ธฐ
์ ๊ทผ
- BFS ํ์ฉ
- 0์ ์์น ํ์ -> ๋ฐฉ๋ฌธ ์ฒดํฌ
- 0 ์์น์์ ์ํ์ข์ฐ์ 1์ด ์์ผ๋ฉด ๊ฒฝ๊ณ -> ๋ค์ ๊ฒฝ๊ณ๋ฅผ ๋ฐฉ๋ฌธํ์ง ์๋๋ก ๋ฐฉ๋ฌธ ์ฒดํฌ, 1์ 0์ผ๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ
- BFS 1ํ์์ ์ฒดํฌํ 1์ ๊ฐ์ = 1์๊ฐ์ด ์ง๋ฌ์ ๋ 0์ 1๋ก ๋ฐ๊พผ ํ์
ํ์ด ๊ณผ์
- t: ์น์ฆ ํ ์์ 1์ ๊ฐ์ ์ ์ฅ
- BFS ์ ์
- while๋ฌธ์ผ๋ก t๊ฐ 0์ด ์๋ ๋๊น์ง bfs๋ฐ๋ณต, bfs 1ํ ๋๋๋ง๋ค
- 0์์ 1๋ก ๋ฐ๊พผ ํ์๋ฅผ t์์ ์ฐจ๊ฐํด์ฃผ๊ธฐ(ํด๋น ๊ฐ์ counts ๋ฐฐ์ด์๋ ์ ์ฅ)
- ์๊ฐ += 1
- time: ์ด ์์ ์๊ฐ
- counts[-1]: ๋ง์ง๋ง์ ์ฐจ๊ฐํ ์
๋ฐฑ์ฑํธ - #13565 ์นจํฌ
๋ฌธ์ ํด์
- ๊ฒฉ์์ ํฌ๊ธฐ: M ๊ฐ๋ก์ค์ ๊ฐ์, N ์ธ๋ก์ค์ ๊ฐ์
- ์ ๋ฅ๊ฐ ์ ํตํ๋ ๋ฌผ์ง์ 0์ผ๋ก ์ ๋ฅ๊ฐ ํตํ์ง ์๋ ๋ฌผ์ง์ 1๋ก ํํ๋๋ค.
- ๋ฐ (๊ฒฉ์์ ๋งจ ์์ค)์์ ํ๋ ค์ค ์ ๋ฅ๊ฐ ์์ชฝ(๊ฒฉ์์ ๋งจ ์๋ซ์ค)๊น์ง ์นจํฌ ๋ ์ ์๋์ง ๊ตฌํด์ผ ํ๋ค.
์ ๊ทผ
- DFS ํ์ฉ: ๋งจ ์์ค์ ๋ชจ๋ ๊ฐ์ ๋ํ์ฌ 0์ด๋ฉด ๋ฐ๋ณต์ ์ผ๋ก ์,ํ,์ข,์ฐ๋ก ์ด๋ํ๋ DFS ํจ์๋ฅผ ํ์ฉํ์ฌ ๋งจ ์๋ซ์ค๊น์ง ํ์.
- ๋ง์ฝ์ DFS ์ธ์์ y๊ฐ์ด ๋งจ ์๋ซ์ค์ ๋๋ฌํ๋ค๋ฉด, flag๋ฅผ โNOโ์์ โYESโ๋ก ๋ณํ.
- flag ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅ
ํ์ด ๊ณผ์
-
graph๋ฅผ 0๊ณผ 1์ ์์๋ก ์ด๋ฃจ์ด์ง 2์ฐจ์ ๋ฐฐ์ด๋ก ์ ๋ ฅ
-
DFS ์ ์
- x , y๋ฅผ ์ธ์๋ก ๋ฐ์์, x ๋ y๊ฐ ๊ทธ๋ํ๋ฅผ ๋ฒ์ด๋ index์ธ ๊ฒฝ์ฐ return์ผ๋ก ํจ์๋ฅผ ์ข ๋ฃ.
- ๋ง์ฝ์ y ์ธ์ ๊ฐ์ด m-1์ด๋ผ๋ฉด, ์นจํฌ์ ์ฑ๊ณตํ๋ค๋ ๋ป์ด๋ฏ๋ก flag๋ฅผ โYESโ๋ก ๋ฐ๊พธ๊ณ ํจ์๋ฅผ ์ข ๋ฃ.
- ๋ง์ฝ์ graph์ x, y ์ขํ ๊ฐ์ด 1์ด๋ผ๋ฉด dfs ์ฌ๊ท๋ฅผ ํ ์ ์์ผ๋ฏ๋ก return์ผ๋ก ํจ์๋ฅผ ์ข ๋ฃ.
- graph์ x,y ์ขํ ๊ฐ์ด 0์ด๋ผ๋ฉด ๋ฐฉ๋ฌธํ๋ค๋ ๋ป์ผ๋ก ์ขํ๊ฐ์ 1๋ก ๋ฐ๊พธ๊ณ , ์/ํ/์ข/์ฐ dfs ํจ์ ์ฌ๊ท ์คํ.
-
์ฒ์์ flag๋ฅผ โNOโ๋ก ์ง์ ํด์ฃผ๊ณ , ์ฒซ ์ค์ ๋ชจ๋ ์์๋ก dfsํจ์๋ฅผ ์คํํ์ ๊ฒฝ์ฐ ์ฑ๊ณต ์ flag๊ฐ โYESโ๋ก ๋ณํ๋๊ณ , ์คํจ ์ โNOโ๋ก ์ ์ง๋จ.
-
๊ฒฐ๊ณผ๊ฐ ๋ด๊ธด flag๋ฅผ ์ถ๋ ฅ.
์ง์์ - #2293 ํ ๋งํ
๋ฌธ์ ํด์
- M, N: ์์ ๊ฐ๋ก ์นธ์ ์, ์์ ์ธ๋ก ์นธ์ ์
- ํ๋ฃจ๊ฐ ์ง๋ ๋๋ง๋ค 0์ผ๋ก ํ์๋ ์์ ์นธ์ ๊ฐ์ด 1์ ๊ฐ์ ์ธ์ ํ๋ค๋ฉด 1๋ก ๋ฐ๋
- 0์ด ๋ชจ๋ 1์ด ๋ ๋๊น์ง ๋ช์ผ์ด ๊ฑธ๋ฆฌ๋์ง ๊ตฌํ๊ธฐ, ๋ชจ๋ 1์ด ๋ ์ ์๋ค๋ฉด -1
์ ๊ทผ
- BFS ํ์ฉ
- ํ ์ฌ์ฉ
- 1์ด์์ ๊ฐ์ธ ์นธ์ ์์น์์ ์ํ์ข์ฐ์ 0์ด ์์ผ๋ฉด ์นธ์๊ฐ ๋ํ๊ธฐ 1๋ก ๋ฐ๊ฟ์ฃผ๊ธฐ
- ์์ ์นธ์ค์ ์ ์ผ ํฐ ๊ฐ == ๋ช์ผ ๊ฑธ๋ ธ๋์ง์ ๊ฐ
ํ์ด ๊ณผ์
- q: ํ, ์ฒ์์ ์์์ 1์ ๊ฐ๋ค์ ์์น ์ธ๋ฑ์ค๋ค์ ๊ฐ์ผ๋ก ์ด๊ธฐํ
- BFS ์ ์
- while๋ฌธ์ผ๋ก q๊ฐ ๋น ๋๊น์ง bfs๋ฐ๋ณต, bfs 1ํ ๋๋๋ง๋ค
- ์ํ์ข์ฐ์ 0์๊ฐ(์์ง ๋ฐฉ๋ฌธํ์ง ์์ ์นธ)์ด ์๋ค๋ฉด ์๊ธฐ์์ + 1์ ๊ฐ์ผ๋ก ๋์
- ๊ทธ๋ฆฌ๊ณ ๊ทธ ์นธ์ ์์น ์ธ๋ฑ์ค ๊ฐ์ q์ append
- BFS๊ฐ ๋๋๊ณ ์์๋ฅผ ์ํํ์ฌ ์ ์ผ ํฐ ๊ฐ์ ์ถ๋ ฅ, ๋ง์ฝ ์์์ 0์ด(๋ชจ๋ 1์ด ๋ ์ ์๋ค) ํ๋๋ผ๋ ์๋ค๋ฉด -1 ์ถ๋ ฅ
๊น์ฌ๋ฏผ - #2606 ๋ฐ์ด๋ฌ์ค
๋ฌธ์ ํด์
- vertex_cnt, edge_cnt: ์ปดํจํฐ ์(๋ ธ๋), ์ปดํจํฐ ์ฐ๊ฒฐ ์ ๋ณด(๊ฐ์ ) ์
- ์ปดํจํฐ ์ฐ๊ฒฐ ์ ๋ณด๋ก ์ปดํจํฐ ์ฐ๊ฒฐ ์ํ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ ธ์ ๋ 1๋ฒ ์ปดํจํฐ๊ฐ ๋ฐ์ด๋ฌ์ค์ ๊ฑธ๋ ธ์ ๊ฒฝ์ฐ ํผํด๋ฅผ ์ ์ ์ปดํจํฐ ์ ๋ฐํ
์ ๊ทผ
- DFS ํ์ฉ
- 1์ ์์น์์ ์ฐ๊ฒฐ๋ ์ปดํจํฐ๋ฅผ Stack์ ํ์ฉํ์ฌ ๋ฐฉ๋ฌธ
ํ์ด ๊ณผ์
-
vertex_list : ์ ๋ ฅ๋ฐ์ vertex_cnt๋ฅผ ํตํด ์ปดํจํฐ ๋ฒํธ ์์ฑ
-
adjacency_list : vertex_list ๊ธธ์ด ๋งํผ 2์ค list ์์ฑ. index 1 list๋ 1๋ฒ ์ปดํจํฐ์ ์๋ฐฉํฅ ์ฐ๊ฒฐ ์ํ
-
visited_vertex : ๋ฐฉ๋ฌธํ ์ปดํจํฐ ๋ฒํธ ๋ฆฌ์คํธ
-
current : ํ์ ์ค ํ์ฌ ์์น
-
stack : ํ์ฌ ์์น์ ์ธ์ ํ ์ปดํจํฐ ๋ฆฌ์คํธ ์์ ์ ์ฅ
-
ํ์ฌ ๋ฌธ์ ์์๋ 1๋ฒ ์ปดํจํฐ์ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ง ๋ฐฉ๋ฌธ
-
while๋ฌธ์ผ๋ก stack์ด ๋น์ด์ง๋๊น์ง ๋ฐ๋ณต
- stack์ ์ ์ฅ๋ 1์ current๋ก pop
- for๋ฌธ์์ adjacency_list[1] ์ ๋ฆฌ์คํธ ์์๊ฐ visited_vertex์ ์์ ๊ฒฝ์ฐ (๋ฐฉ๋ฌธํ์ง ์์์ ๊ฒฝ์ฐ) visited_vertex์ append
-
for๋ฌธ์ด ๋๋๋ฉด cuurent์ ์๋ ๋๋จธ์ง 1๋ visited_vertex์ append
-
visited_vertex๋ฅผ set์ผ๋ก ์ค๋ณต์ ๊ฑฐํ 1๋ฒ ์ปดํจํฐ๋ฅผ ์ ์ธํ ์ซ์ ์ถ๋ ฅ