๊ทธ๋ํ(5)
-
[์๊ณ ๋ฆฌ์ฆ] ์์ ์ ๋ ฌ(Topological Sort)
์์ ์ ๋ ฌ์ด๋?์์ ์ ๋ ฌ์ ๋ฐฉํฅ ๊ทธ๋ํ(DAG, Directed Acyclic Graph)์์ ๋ ธ๋๋ค์ ์์๋๋ก ์ ๋ ฌํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ ์ ๋ ฌ๋ ์์๋ ๋ชจ๋ ๊ฐ์ (A โ B)์ ๋ํด A๊ฐ B๋ณด๋ค ๋จผ์ ๋์์ผ ํ๋ ์์๋ฅผ ๋ณด์ฅ ์ฃผ๋ก ๋ค์๊ณผ ๊ฐ์ ๋ฌธ์ ์ํฉ์์ ์ฌ์ฉ:์์ ์์ ์ ํ๊ธฐ (์: ๊ฑด๋ฌผ์ ์ง๊ธฐ ์ ์ ๋จผ์ ์ง์ด์ผ ํ๋ ๊ฑด๋ฌผ ์กด์ฌ)๊ฐ์ ์๊ฐ ์์ (์ ์ ๊ณผ๋ชฉ์ด ์๋ ๊ฒฝ์ฐ)ํ๋ก์ ํธ ๋ชจ๋ ๊ฐ์ ์์กด์ฑ ์ฒ๋ฆฌ ๋์ ๋ฐฉ์ (Kahn's Algorithm - BFS ๊ธฐ๋ฐ)๋ชจ๋ ๋ ธ๋์ ์ง์ ์ฐจ์(indegree)๋ฅผ ๊ณ์ฐํ๋ค.์ง์ ์ฐจ์๊ฐ 0์ธ ๋ ธ๋๋ค์ ํ์ ๋ฃ๋๋ค.ํ์์ ํ๋์ฉ ๊บผ๋ด์ด ๊ฒฐ๊ณผ ๋ฆฌ์คํธ์ ์ถ๊ฐํ๊ณ ์ฐ๊ฒฐ๋ ๋ ธ๋์ ์ง์ ์ฐจ์๋ฅผ 1 ๊ฐ์์ํจ๋ค.์๋ก ์ง์ ์ฐจ์๊ฐ 0์ด ๋ ๋ ธ๋๋ฅผ ํ์ ๋ฃ๋๋ค.ํ๊ฐ ๋น ๋๊น์ง ๋ฐ๋ณตํ..
2025.07.25 -
[BOJ] #2606 - ๋ฐ์ด๋ฌ์ค
2606๋ฒ: ๋ฐ์ด๋ฌ์ค ์ฒซ์งธ ์ค์๋ ์ปดํจํฐ์ ์๊ฐ ์ฃผ์ด์ง๋ค. ์ปดํจํฐ์ ์๋ 100 ์ดํ์ด๊ณ ๊ฐ ์ปดํจํฐ์๋ 1๋ฒ ๋ถํฐ ์ฐจ๋ก๋๋ก ๋ฒํธ๊ฐ ๋งค๊ฒจ์ง๋ค. ๋์งธ ์ค์๋ ๋คํธ์ํฌ ์์์ ์ง์ ์ฐ๊ฒฐ๋์ด ์๋ ์ปดํจํฐ ์์ ์๊ฐ ์ฃผ์ด www.acmicpc.net ** ๋ฌธ์ ์ ํ DFS, BFS ** ํ์ด ๋จ์ํ ์์ ์ ์ ์์๋ถํฐ ๋๋ฌํ ์ ์๋ ๋ ธ๋์ ์๋ฅผ ๊ณ์ฐํ๋ ๋ฌธ์ DFS or BFS๋ฅผ ์ด์ฉํ์ฌ ๋ฐฉ๋ฌธํ๊ฒ ๋๋ ๋ ธ๋์ ๊ฐ์๋ฅผ ๊ณ์ฐ ์ปดํจํฐ์ ์๊ฐ ์ ์ผ๋ฏ๋ก, DFS๋ฅผ ์ด์ฉํด ๋น ๋ฅด๊ฒ ๋ฌธ์ ๋ฅผ ํธ๋ ๊ฒ์ด ์ ๋ฆฌ def dfs(now_pos): global count visited[now_pos] = True for next_pos in adj[now_pos]: if not visited[next_pos]: count += 1 dfs..
2021.06.22 -
[BOJ] #1939 - ์ค๋์ ํ
1939๋ฒ: ์ค๋์ ํ ์ฒซ์งธ ์ค์ N, M(1โคMโค100,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ M๊ฐ์ ์ค์๋ ๋ค๋ฆฌ์ ๋ํ ์ ๋ณด๋ฅผ ๋ํ๋ด๋ ์ธ ์ ์ A, B(1โคA, BโคN), C(1โคCโค1,000,000,000)๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋ A๋ฒ ์ฌ๊ณผ B๋ฒ ์ฌ ์ฌ์ด์ ์ค๋์ ํ์ด C์ธ ๋ค๋ฆฌ www.acmicpc.net ** ๋ฌธ์ ์ ํ ์ด์ง ํ์ ** ํ์ด ๋ค๋ฆฌ์ ๊ฐ์ M์ ์ต๋ 100,000์ด๋ฉฐ, ์ค๋ ์ ํ C๋ ์ต๋ 1,000,000,000 ์ด์ง ํ์์ ์ด์ฉํ์ฌ O(M * logC)์ ๋ฌธ์ ํด๊ฒฐ 100,000 * 30 = 3,000,000 ํ๋ฒ์ ์ด๋์์ ์ฎ๊ธธ ์ ์๋ ๋ฌผํ๋ค์ ์ค๋์ ์ต๋๊ฐ์ ์ด์ง ํ์์ผ๋ก ์ฐพ์ ๋ฐ๋ณต์ ์ผ๋ก ์ค๋์ ์ค์ ํ์ฌ, ์ด๋์ด ๊ฐ๋ฅํ ๊ฒฝ๋ก๋ฅผ ์ฐพ์ ์ต๋ ์ค๋๊ณผ ์ต์ ์ค๋ ์ค์ ์ค๊ฐ๊ฐ์ ์ด๊ธฐํํ ๋ ์ต์ ์ค๋..
2021.06.16 -
[์๊ณ ๋ฆฌ์ฆ] DFS(๊น์ด ์ฐ์ ํ์)
DFS (Depth-First Search) ๊น์ด ์ฐ์ ํ์DFS๋ ๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ ์ค ํ๋๋ก์์ ๋ ธ๋์์ ๊ฐ๋ฅํ ๊น์ด๊น์ง ๋จผ์ ํ์ํ ๋ค๋ ์ด์ ๊น๊ฒ ๊ฐ ๊ณณ์ด ์์ ๊ฒฝ์ฐ ๋๋์๊ฐ๋ฉฐ(Backtracking) ํ์์ ์ด์ด๊ฐ๋ ๋ฐฉ์์ ๋๋ค. DFS ํน์ง๋ฐฉ๋ฌธ ๊ฒฝ๋ก๋ฅผ ๊น์ด ์ฐ์ ์ผ๋ก ์ถ์ ์ฌ๊ท ํธ์ถ ๋๋ ์คํ(Stack)์ ํ์ฉํด ๊ตฌํ ๊ฐ๋ฅ๊ทธ๋ํ์ ์ฐ๊ฒฐ ์์ ํ์์ ์ ์ฉ์ํ ๊ตฌ์กฐ(์ฌ์ดํด)๋ ๋ฏธ๋ก ์ฐพ๊ธฐ ๋ฌธ์ ๋ฑ์ ์์ฃผ ์ฌ์ฉ๋จ DFS vs BFS๊ตฌ๋ถDFSBFS์๋ฃ๊ตฌ์กฐ์คํ(Stack) or ์ฌ๊ทํ(Queue)๋ฐฉ๋ฌธ ์์๊น์ด ์ฐ์ โ ๋ค์ ๋ถ๊ธฐ๋ก ์ด๋๋๋น ์ฐ์ โ ๋ ๋ฒจ ์์๋๋ก ์ด๋๊ตฌํ ๋ฐฉ์์ฃผ๋ก ์ฌ๊ท ๋๋ ์๋ ์คํํ๋ก ๊ตฌํ์ฌ์ฉ ์์๋ฐฑํธ๋ํน, ๋ฏธ๋ก, ํธ๋ฆฌ ํ์ ๋ฑ์ต๋จ ๊ฑฐ๋ฆฌ, ๋ ๋ฒจ ๊ธฐ๋ฐ ํ์ ๋ฑ DFS ์๊ณ ๋ฆฌ์ฆ ๊ตฌํDFS..
2021.06.05 -
[์๊ณ ๋ฆฌ์ฆ] #6_1 ๊ทธ๋ํ
** ๊ทธ๋ํ(Graph) ์ค์ ์ธ๊ณ์ ํ์์ด๋ ์ฌ๋ฌผ์ ๋ ธ๋์ ๊ฐ์ ์ผ๋ก ํํ ** ๊ทธ๋ํ ๊ด๋ จ ์ฉ์ด ๋ ธ๋ (Node): ์์น (= ์ ์ , Vertex) ๊ฐ์ (Edgd): ์์น ๊ฐ์ ๊ด๊ณ๋ฅผ ํ์ํ ์ , ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ ์ (= Link, Branch) ์ธ์ ์ ์ (Adjacent Vertex): ๊ฐ์ ์ผ๋ก ์ง์ ์ฐ๊ฒฐ๋ ๋ ธ๋ ์ฐธ๊ณ ์ฉ์ด ์ ์ ์ ์ฐจ์ (Degree): ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์์ ํ๋์ ์ ์ ์ ์ธ์ ํ ์ ์ ์ ์ ์ง์ ์ฐจ์ (In-Degree): ๋ฐฉํฅ ๊ทธ๋ํ์์ ์ธ๋ถ์์ ์ค๋ ๊ฐ์ ์ ์ ์ง์ถ ์ฐจ์ (Out-Degree): ๋ฐฉํฅ ๊ทธ๋ํ์์ ์ธ๋ถ๋ก ํฅํ๋ ๊ฐ์ ์ ์ ๊ฒฝ๋ก ๊ธธ์ด (Path Length): ๊ฒฝ๋ก๋ฅผ ๊ตฌ์ฑํ๊ธฐ ์ํด ์ฌ์ฉ๋ ๊ฐ์ ์ ์ ๋จ์ ๊ฒฝ๋ก (Simple Path): ์ฒ์ ์ ์ ๊ณผ ๋ ์ ์ ์ ์ ์ธํ๊ณ ์ค๋ณต..
2021.06.04