๐ The Algorithm Mastery Series ( part 4 )
Algorithm Mastery Series Part 4์์ ๊ทธ๋ํ ์๋ฃ๊ตฌ์กฐ์ ๊ธฐ์ด๋ถํฐ LinkedIn ์น๊ตฌ ์ถ์ฒ ์์คํ ์ BFS ๊ธฐ๋ฐ ๊ตฌํ๊น์ง ์ค๋ฌด ์ฌ๋ก๋ก ์ค๋ช
AI ์์ฝ
Context
๊ทธ๋ํ๋ ๋จ์ํ ๋ฐ์ดํฐ ๋ฆฌ์คํธ๊ฐ ์๋๋ผ ํญ๋ชฉ ๊ฐ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ ๊ตฌ์กฐ๋ก, ์์ ๋คํธ์ํฌ, ๋ด๋น๊ฒ์ด์ , ์ถ์ฒ ์์คํ ๋ฑ 2026๋ ์ ํ๋์ ์์คํ ์ ๋ฐ์ ์งํฑํ๊ณ ์๋ค. ์ค์ ๊ทธ๋ํ ๋ฌธ์ ํด๊ฒฐ์ ์ํด์๋ ์ฌ๋ฐ๋ฅธ ์๋ฃ๊ตฌ์กฐ ์ ํ๊ณผ ์ ์ ํ ์ํ ์๊ณ ๋ฆฌ์ฆ ์ดํด๊ฐ ํ์์ ์ด๋ค.
Technical Solution
- ๊ทธ๋ํ ํํ ๋ฐฉ์ ์ ํ: Adjacency List(๊ณต๊ฐ O(V + E), ์ฃ์ง ํ์ธ O(degree))๋ฅผ ๋๊ท๋ชจ ์ค์ ๊ทธ๋ํ(์์ ๋คํธ์ํฌ, ๋ก๋ ๋คํธ์ํฌ)์, Adjacency Matrix(๊ณต๊ฐ O(Vยฒ), ์ฃ์ง ํ์ธ O(1))๋ฅผ ์๊ท๋ชจ ์์ ๊ทธ๋ํ์ ์ ์ฉ
- ์น๊ตฌ ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ: BFS๋ฅผ ์ฌ์ฉํด ์ฌ์ฉ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๋ ๋ฒจ๋ณ ํ์(Level 0: ์ฌ์ฉ์ ๋ณธ์ธ, Level 1: ์ง์ ์น๊ตฌ, Level 2: ์น๊ตฌ์ ์น๊ตฌ)์ ๊ตฌํ
- ์ ์ ๋ฉ์ปค๋์ฆ ๋์ : ์ถ์ฒ ๋์ ์ฌ์ฉ์์ ์ํธ ์น๊ตฌ ์๋ฅผ ๊ณ์ฐํด ์ ์ํ, ์ํธ ์น๊ตฌ๊ฐ ๋ง์์๋ก ๋ ๋์ ์ ์์ผ๋ก ํ๊ฐ
- C++ ๊ตฌํ: unordered_map์ ์ด์ฉํ Adjacency List ๊ธฐ๋ฐ SocialNetwork ํด๋์ค ์์ฑ์ผ๋ก userId์ ์น๊ตฌ ๋ฆฌ์คํธ ๋งคํ
- ์ฑ๋ฅ ์ต์ ํ: BFS ์กฐ๊ธฐ ์ข ๋ฃ(์ ์ฒด ๊ทธ๋ํ ํ์์ด ์๋ ํ์ํ ๊น์ด๊น์ง๋ง ํ์) ๊ฐ๋ฅ์ฑ ์ธ๊ธ
Key Takeaway
๊ทธ๋ํ ๊ธฐ๋ฐ ์์คํ ์ค๊ณ ์ ์๋ฃ๊ตฌ์กฐ ํธ๋ ์ด๋์คํ(๋ฐ์ง vs ํฌ์ ๊ทธ๋ํ)๋ฅผ ๋จผ์ ํ๋จํ๊ณ , ํด๊ฒฐ ๋์ ๋ฌธ์ ์ ๊ฑฐ๋ฆฌ/๊ด๊ณ ํจํด์ ๋ง๋ ์ํ ์๊ณ ๋ฆฌ์ฆ(BFS, DFS, Dijkstra)์ ์ ํํ๋ ๊ฒ์ด ํต์ฌ์ด๋ค. ์ด๋ LinkedIn ๊ท๋ชจ์ 500M+ ์ฌ์ฉ์ ๊ทธ๋ํ์์๋ 100ms ์ดํ์ ์๋ต ์๋๋ฅผ ๋ฌ์ฑํ๋ ๊ธฐ์ด๊ฐ ๋๋ค.
์ค์ฒ ํฌ์ธํธ
์์ ๋คํธ์ํฌ๋ ์ถ์ฒ ์์คํ ๊ฐ๋ฐ ์ Adjacency List๋ฅผ ์ฌ์ฉํ BFS ๊ตฌํ์ผ๋ก ์ํธ ์น๊ตฌ ์ ๊ธฐ๋ฐ ์ ์ ๋ฉ์ปค๋์ฆ์ ๋์ ํ๋ฉด, ๋จ์ ๋ฌด์์ ์ถ์ฒ ๋์ 2๋ ์ฐ๊ฒฐ๋ง ๋ด์์ ๊ด๋ จ์ฑ ๋์ ์ฌ์ฉ์ ์ ์์ด ๊ฐ๋ฅํ๋ค. ์ด๋ BFS์ ์กฐ๊ธฐ ์ข ๋ฃ ์ต์ ์ ํ์ฉํ๋ฉด ์ ์ฒด ๊ทธ๋ํ ํ์ ์์ด๋ ์ถฉ๋ถํ ์ถ์ฒ ํ๋ณด๋ฅผ ๋น ๋ฅด๊ฒ ํ๋ณดํ ์ ์๋ค.