n๊ฐ์ ์ ๋ ฅ ๋ฐ์ดํฐ์ ๋ํ์ฌ ์๊ณ ๋ฆฌ์ฆ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ์ ์ผ๋งํผ์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋์ง๋ฅผ ๋ํ๋ด๋ ๊ฒ์ผ๋ก ์ ๊ทผ์ ํ๊ธฐ๋ฒ(asymptotic notation)์ ์ฌ์ฉ ์ ๊ทผ์ ํ๊ธฐ๋ฒ(asymptotic notation) : ์ด๋ค ํจ์์ ์ฆ๊ฐ ์์์ ๋ค๋ฅธ ํจ์์์ ๋น๊ต๋ก ํํ
๋ณต์กํ ๋ฌธ์ ๋ฅผ ๊ฐ๋จํ ์ฌ๋ฌ ๊ฐ์ ๋ฌธ์ ๋ก ๋๋์ด ํธ๋ ๋ฐฉ๋ฒ์ผ๋ก, ๋ถ๋ถ ๋ฌธ์ ๋ฐ๋ณต๊ณผ ์ต์ ๋ถ๋ถ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ฌธ์ ๋ฅผ ํธ๋๋ฐ ํจ์จ์ ์ด๋ค. (ํฐ ๋ฌธ์ ๋ฅผ ์์ ๋ฌธ์ ๋ก ์ชผ๊ฐ์ ๊ทธ ๋ต์ ์ ์ฅํด๋๊ณ ์ฌํ์ฉ)
๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋์ ํ๋ก๊ทธ๋๋ฐ ์ฌ์ฉ ์ ์ง๋์น๊ฒ ๋ง์ ์ผ์ ํ๋ค๋ ๊ฒ์์ ์ฐฉ์ํ์ฌ ๊ณ ์๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. Greedy๋ โํ์์ค๋ฌ์ด, ์์ฌ ๋ง์โ ์ด๋ ๋ป์ผ๋ก Greedy ์๊ณ ๋ฆฌ์ฆ์ ๋ง ๊ทธ ๋๋ก ์ฌ๋ฌ ๊ฒฝ์ฐ ์ค ํ๋๋ฅผ ๊ฒฐ์ ํด์ผ ํ ๋๋ง๋ค ๊ทธ ์๊ฐ์ ์ต์ ์ด๋ผ๊ณ ์๊ฐ๋๋
๊ทธ๋ํ ํ์์ด๋ ํ๋์ ์ ์ ์์ ์์ํ์ฌ ์ฐจ๋ก๋๋ก ๋ชจ๋ ์ ์ ๋ค์ ํ๋ฒ์ฉ ๋ฐฉ๋ฌธํ๋ ๊ฒ์ ๋งํ๋ฉฐ, ํฌ๊ฒ DFS ์ BFS ๋๊ฐ์ง ๋ฐฉ์์ด ์๋ค.
๊ฐ์ค์น ๊ทธ๋ํ(Weighted Graph)์์ ํ ์ ์ ์์ ๋ค๋ฅธ ์ ์ ์ผ๋ก ๊ฐ๋, ๊ฐ์ค์น ํฉ์ด ์ต์๊ฐ ๋๋๋ก ํ๋ ๊ฒฝ๋ก๋ฅผ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ
Disjoint set (์๋ก ์ค๋ณต๋์ง ์๋ ๋ถ๋ถ ์งํฉ๋ค๋ก ๋๋ ์ง ์์ ์ ๋ณด๋ฅผ ์ ์ฅ/์กฐ์ํ๋ ์๋ฃ๊ตฌ์กฐ)์ ํํํ ๋ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, ๋ node๊ฐ ๊ฐ์ ์งํฉ์ ์ํ๋์ง ํ๋ณํ ๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํ ์ ์๋ค!
์์๊ฐ ์๋ ์์ ์ ์ฐจ๋ก๋๋ก ์ํํ ๋ ์์๋ฅผ ๊ฒฐ์ ํด์ฃผ๊ธฐ ์ํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก, DAG(Directed Acyclic Graph)์๋ง ์ ์ฉ ๊ฐ๋ฅ
LCA๋ ์ต์๊ณตํต์กฐ์(Lowest Common Ancestor)์ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค. ์ ๊ทธ๋ฆผ์์ 2์ 7์ ์ต์๊ณตํต์กฐ์์ 1์ด๋ค. LCA๋ 2์ 7์ด ์ฃผ์ด์ก์ ๋ 1์ ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ผ๊ณ ๋ณด๋ฉด ๋๋ค!
Backtracking(๋์ถ์ )์ tree์ ๋ณํ๋ DFS๋ผ๊ณ ํ ์ ์๋ค. ๊ฐ ๋ง๋๊ฐ ์ ๋งํ์ง(promising) ๊ฒ์ฌํ๊ณ , ๋ง์ฝ ์ ๋งํ์ง ์์ผ๋ฉด ๊ทธ node์ ๋ถ๋ชจ node๋ก ๋์ถ์ ์ ํ๋ ๊ฒ์ ์ ์ธํ๊ณ ๋ DFS์ ๊ฐ๋ค. ์ฆ, ๋ฐฑํธ๋ํน์ ์ ๋ง์ฌ๋ถ๋ฅผ ํ๋จํ์ฌ ๊ฐ์ง์น๊ธฐ
๋ฐฐ๋ญ์ ์ฉ๋๊ณผ ๊ฐ ๋ฌผ๊ฑด์ {๋ฌด๊ฒ, ๊ฐ์น}๊ฐ ์ฃผ์ด์ก์ ๋ ๋ฐฐ๋ญ์ ๋ด์ ์ ์๋ ๋ฌผ๊ฑด์ ์ต๋ ๊ฐ์น๋ฅผ ์ฐพ๋ ๋ฌธ์
๋ฐฐ์ด์์ ์ํ๋ ๊ฐ์ O(log N) ๋ง์ ์ฐพ๋ ๋ฐฉ๋ฒ์ธ Binary Search์ ๋ํด ์์๋ณด์. Binary Search๋ up/down ๊ฒ์๊ณผ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ๋ฐฐ์ด์์ ์ํ๋ ๊ฐ์ ์์น๋ฅผ ์ฐพ์ ์ ์๋ ๋ฐฉ๋ฒ์ด๋ค. Binary Search๋ฅผ ์ฌ์ฉํ ๋ ์ฃผ์ํด์ผํ ์ ์ด