Data structure Jan 8, 2025 ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ ์๋ฒฝ ์ ๋ฆฌ (์ถ์ ๋น๋: ์) ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ ๊ธฐ๋ณธ ๊ฐ๋ ์๋ฃ๊ตฌ์กฐ๋? ๋ ผ๋ฆฌ์ ์ผ๋ก ์ค๊ณ๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ ๊ตฌ์กฐ์ ์ผ๋ก ๋ชจ์ฌ์๋ ๋ฐ์ดํฐ์ ์งํฉ ๋ฐ์ดํฐ ์ ํ๊ณผ ์ ๋ฌด ์ํฉ์ ๋ฐ๋ผ ์ ํํด์ ํ์ฉ ์๋ฃ๊ตฌ์กฐ์ ํน์ง ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊ตฌ์ฑ ๋ฐฉ์์ด ์ฑ๋ฅ์ ์ง์ ์ ์ธ ์ํฅ์ ๋ฏธ์นจ ๋ฐ์ดํฐ ์ฉ๋๊ณผ ์คํ์๊ฐ์ ์ต์ํํ๋ ๊ฒ์ด ๋ชฉํ ์ถ๊ฐ, ์ญ์ , ํ์์ ํจ์จ์ ์ผ๋ก ์ฐ์ฐํ๋๋ก ์ค๊ณ ํ์ ์๋ฃ๊ตฌ์กฐ์ ์ ํ 1. ๋จ์๊ตฌ์กฐ ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฅผ ํ์ฅํ์ฌ ์๋ฃ๊ตฌ์กฐ ๊ตฌ์ฑ 2. ์ ํ๊ตฌ์กฐ ๋ฐ์ดํฐ ๊ฐ 1:1 ๋์ ๊ด๊ณ๋ก ๊ตฌ์ฑ ๊ตฌ๋ถ: ์์ฐจ๊ตฌ์กฐ: ํ์์๋ ์ฐ์ ์ฐ๊ฒฐ๊ตฌ์กฐ: ์ด๋(์ฝ์ , ์ญ์ ) ์๋ ์ฐ์ ์ข ๋ฅ: ์คํ, ํ, ๋ฐํฌ, ์ ํ ๋ฆฌ์คํธ, ์ฐ๊ฒฐ ๋ฆฌ์คํธ 3. ๋น์ ํ๊ตฌ์กฐ 1:N, N:M ๊ตฌ์กฐ ์ข ๋ฅ: ํธ๋ฆฌ, ๊ทธ๋ํ 4. ํ์ผ๊ตฌ์กฐ ์ค์ ๋ฐ์ดํฐ ๊ธฐ๋ก ์ ํ์ฉ ์ข ๋ฅ: ์์ฐจ ํ์ผ, ์ง์ ํ์ผ, ์์ธ ์์ฐจ ํ์ผ ์๊ณ ๋ฆฌ์ฆ ์ ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ํจ์จ์ ์ธ ํด๋ฒ ์๊ณ ๋ฆฌ์ฆ + ๋ฐ์ดํฐ๊ตฌ์กฐ = ํ๋ก๊ทธ๋จ ์๊ณ ๋ฆฌ์ฆ ์์น ์ถ๋ ฅ์ ๋ฐ๋์ 1๊ฐ ์ด์ ์กด์ฌ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ช ํํ ์๋ฏธ์ ์๋ฒฝํ ๊ตฌ์ฑ์ ๊ฐ์ง ๋ชจ๋ ๊ธฐ๋ฅ์ ์ ํด์ง ํ์๋งํผ ๋ฐ๋ณต๋๋ฉฐ ์ค์ ์ฐ์ฐ ๊ฐ๋ฅํด์ผ ํจ ์๊ณ ๋ฆฌ์ฆ ์ฑ๋ฅ ํ๋จ ๊ธฐ์ค ์ ํ์ฑ ๋ช ํ์ฑ ์ํ๋(์ฐ์ฐ์ ์ํ ํ์) ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ์๊ณ ๋ฆฌ์ฆ ํํ ๋ฐฉ๋ฒ ์์๋(Flow Chart) ๋ํ๊ณผ ๊ธฐํธ๋ก ํํ ์์ฌ์ฝ๋(Pseudo Code) ์ผ๋ฐ์ ์ธ ์ธ์ด๋ก ์ฝ๋์ ์ ์ฌํ๊ฒ ํํ ์๊ณ ๋ฆฌ์ฆ ์ค๊ณ ๊ธฐ๋ฒ ๋์ ๊ณํ๋ฒ ์์ ๋ฌธ์ ์ ํด๊ฒฐ๋ฒ์ ํ์ฉํ์ฌ ํฐ ๋ฌธ์ ํด๊ฒฐ ํ์์ ์๊ณ ๋ฆฌ์ฆ ๊ฐ ๋ถ๊ธฐ์์ ์ต์ ์ ํด ์ ํ ์ ์ฒด์ ์ธ ์ต์ ํด๋ฅผ ๋ณด์ฅํ์ง๋ ์์ ์ฌ๊ท์ ์๊ณ ๋ฆฌ์ฆ ๋์ผํ ํ์ด๋ฅผ ๋ฐ๋ณต์ ์ผ๋ก ํธ์ถ ๊ทผ์ฌ ์๊ณ ๋ฆฌ์ฆ ๋น ๋ฅธ ๊ณ์ฐ์ ์ํด ๊ทผ์ฌ ํด๋ฒ ์ํ ๋ถํ ์ ๋ณต๋ฒ ๋ฌธ์ ๋ฅผ ์์ ๋จ์๋ก ๋ถํ ํ์ฌ ํด๊ฒฐ ํด๊ฐ ๊ฒ์๋ฒ ํ์ ์คํจ ์ ์ด์ ์ฑ๊ณต ๋ถ๊ธฐ๋ก ๋๋์๊ฐ๋ ๋ฐฉ์ ์์: ๊น์ด ์ฐ์ ํ์ ์๊ณ ๋ฆฌ์ฆ(DFS) ์ ํ๊ตฌ์กฐ ์์ธ ์ค๋ช ์คํ(Stack) ๋ฐ์ดํฐ ์ ์ถ๋ ฅ์ด ํ์ชฝ์์๋ง ๋ฐ์ ํน์ง: ํ์ ์ ์ถ(LIFO: Last In First Out) ์ฃผ์ ๊ฐ๋ : ์คํ ํฌ์ธํฐ(TOP): ์์น ์ ๋ณด ์ ์ฅ PUSH(์ฝ์ ): Overflow ๋ฐ์ ๊ฐ๋ฅ POP(์ถ์ถ): Underflow ๋ฐ์ ๊ฐ๋ฅ ํ์ฉ: 0 ์ฃผ์ ๋ช ๋ น์ด ๋ฐฉ์ ์์ ํ๊ธฐ๋ฒ ์ ์์: +AB ์ค์์: A+B ํ์์: AB+ ์์: (A-B)*C+D ์ ์์ ๋ณํ: -AB โ *-ABC โ +*-ABCD ํ์์ ๋ณํ: AB- โ AB-C* โ AB-C*D+ ํ(Queue) ๋ฐ์ดํฐ ์ ์ถ๋ ฅ์ด ๋ฐ๋์ชฝ์์ ๋ฐ์ ํน์ง: ์ ์ ์ ์ถ(FIFO: First In First Out) ํฌ์ธํฐ: Rear(์ฝ์ ): ๋ง์ง๋ง ์ฝ์ ๋ฐ์ดํฐ ์์น Front(์ญ์ ): ์ฒ์ ์ฝ์ ๋ ๋ฐ์ดํฐ ์์น ์ด๊ธฐ๊ฐ: -1 ํ์ฉ: ๋๊ธฐํ๋ ฌ ์ฒ๋ฆฌ ๋ฐํฌ(Deque) ์ ์ถ๋ ฅ์ด ์์ชฝ์์ ๊ฐ๋ฅํ ์๋ฐฉํฅ ํ ํฌ์ธํฐ: Left, Right ์ ๋ ฅ๋ฐฉ์: ์คํฌ๋กค ๋ฐฉ์ ์ถ๋ ฅ๋ฐฉ์: ์ํ ๋ฐฉ์ ์ ํ๋ฆฌ์คํธ ํน์ง: ์ฐ์๋ ๊ณต๊ฐ์ ์ ์ฅ ๋น ๋ฅธ ์ ๊ทผ ์๋ ๋๋ฆฐ ์ฝ์ /์ญ์ ์๋ ๋ํ์ ํ: ๋ฐฐ์ด ๋ฐฐ์ด ํน์ง: ์ฐ์์ ๋ฐ์ดํฐ ๋์ด Index๋ก ์์น ๊ตฌ๋ถ ๊ณ ์ ํฌ๊ธฐ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๋ ผ๋ฆฌ์ /๋ฌผ๋ฆฌ์ ์์ ๋์ผ ์ฐ์ฐ ํจ์จ: ์ถ๊ฐ ํ๊ท ์ด๋: (N+1)/2 ์ญ์ ํ๊ท ์ด๋: (N-1)/2 ์ฐ๊ฒฐ๋ฆฌ์คํธ ๊ตฌ์ฑ: ๋ ธ๋(๋ฐ์ดํฐ + ํฌ์ธํฐ) ์ข ๋ฅ: ๋จ์ผ ์ฐ๊ฒฐ๋ฆฌ์คํธ ๋จ์ผ ํฌ์ธํฐ๋ก ๋ค์ ์์น ์ฐธ์กฐ ๋ง์ง๋ง ํฌ์ธํฐ๋ Null ์ฒซ ๋ ธ๋๋ถํฐ ํ์ ๋จ์ผ ์ํ ์ฐ๊ฒฐ๋ฆฌ์คํธ ๋ง์ง๋ง ๋ ธ๋๊ฐ ์ฒซ ๋ ธ๋ ์ฐธ์กฐ ์ํ ํ์ ๊ฐ๋ฅ ์ด์ค ์ฐ๊ฒฐ๋ฆฌ์คํธ ์ /ํ ๋ ธ๋ ์์น ์ฐธ์กฐ ์๋ฐฉํฅ ํ์ ๊ฐ๋ฅ ๋ฐ์ดํฐ ๋ณต๊ตฌ ๊ฐ๋ฅ ์ด์ค ์ํ ์ฐ๊ฒฐ๋ฆฌ์คํธ ์๋ฐฉํฅ ํ์ ์ํ ๊ตฌ์กฐ ๋ฐ์ดํฐ ๋ณต๊ตฌ ๊ฐ๋ฅ ๋น์ ํ๊ตฌ์กฐ ์์ธ ์ค๋ช ํธ๋ฆฌ(Tree) 1:N ๊ณ์ธต ๊ตฌ์กฐ ํน์ง: ๊ฐ์ (Edge, Branch)์ผ๋ก ์ฐ๊ฒฐ N๊ฐ ๋ ธ๋ ํธ๋ฆฌ์ ๊ฐ์ ์: N-1 ๋ฐฉํฅ์ฑ ์๋ ๋น์ํ ๊ทธ๋ํ ์ฃผ์ ์ฉ์ด ๊ทผ(Root) ๋ ธ๋ ๋จ๋ง(Leaf) ๋ ธ๋ ๋ด๋ถ(Internal) ๋ ธ๋ ํ์ (Sibling) ๋ ธ๋ ๊ตฌ์กฐ ๊ด๋ จ ์ฉ์ด ๋ ธ๋์ ํฌ๊ธฐ ๋ ธ๋์ ๊น์ด ๋ ธ๋์ ๋์ด ํธ๋ฆฌ์ ๋์ด ๋ ธ๋์ ๋ ๋ฒจ ๋ ธ๋์ ์ฐจ์ ํธ๋ฆฌ์ ์ฐจ์ ์ด์งํธ๋ฆฌ ์ข ๋ฅ ์ ์ด์งํธ๋ฆฌ ํ์ ๋ ธ๋๊ฐ 0๊ฐ ๋๋ 2๊ฐ ์์ ์ด์งํธ๋ฆฌ ๋ง์ง๋ง ๋ ๋ฒจ ์ ์ธ ๋ชจ๋ ํ์ ๋ ธ๋๊ฐ 2๊ฐ ์์๋๋ก ์ฑ์์ง ๊ตฌ์กฐ ํฌํ ์ด์งํธ๋ฆฌ ๋ชจ๋ ํ์ ๋ ธ๋๊ฐ 2๊ฐ ํธ๋ฆฌ ์ํ ๋ฐฉ์ ์ค์ ์ํ ์ข์ธก์์ โ ๋ถ๋ชจ โ ์ฐ์ธก์์ G -> D -> H -> B -> E -> A -> F -> C ์ ์ ์ํ ๋ถ๋ชจ โ ์ข์ธก์์ โ ์ฐ์ธก์์ A -> B -> D -> G -> H -> E -> C -> F ํ์ ์ํ ์ข์ธก์์ โ ์ฐ์ธก์์ โ ๋ถ๋ชจ G -> H -> D -> E -> B -> F -> C -> A ๊ทธ๋ํ(Graph) N:M ๋ค๋๋ค ๊ตฌ์กฐ ํน์ง: ๋ค์ค ๊ฒฝ๋ก ์ค์ ๊ฐ๋ฅ ๋ ๋ฆฝ๋ ๋ถ๋ถ ๊ทธ๋ํ ๊ตฌ์ฑ ๊ฐ๋ฅ ์ํ ๊ฐ๋ฅ ๊ทธ๋ํ ์ข ๋ฅ ๋ฐฉํฅ์ฑ: ๋ฐฉํฅ/๋ฌด๋ฐฉํฅ ๊ทธ๋ํ ๋ ธ๋ ์ฐ๊ฒฐ: ๋ถ๋ถ/์์ ๊ทธ๋ํ ํน์ ๋ ธ๋ ์ฐ๊ฒฐ: ์ฐ๊ฒฐ/๋น์ฐ๊ฒฐ ๊ทธ๋ํ ์ํ์ฑ: ์ํ/๋น์ํ ๊ทธ๋ํ ๊ฐ์ค์น: ๊ฐ์ค์น/๋น๊ฐ์ค์น ๊ทธ๋ํ ์ฃผ์ ์ฉ์ด ์ ์ (Vertex) ๊ฐ์ (Edge, Branch) ์ธ์ ์ ์ (Adjacent Vertex) ์ฌ์ดํด ๋จ์ ๊ฒฝ๋ก(Simple Path) ๊ตฌ์กฐ ๋ถ์ ๊ฐ๋ ์ ์ ์ ์ฐจ์(Degree) ์ง์ ์ฐจ์(In-Degree) ์ง์ถ ์ฐจ์(Out-Degree) ๊ฒฝ๋ก ๊ธธ์ด(Path Length) ๋ฐฉํฅ ๊ทธ๋ํ ๋ฐฉํฅ์ฑ ์กด์ฌ <A,B>์ <B,A>๋ ๋ค๋ฅธ ํํ ์ต๋ ๊ฐ์ ์: n(n-1) ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ ๋ฐฉํฅ์ฑ ์์ (A,B)์ (B,A)๋ ๋์ผ ํํ ์ต๋ ๊ฐ์ ์: n(n-1)/2