ํ๋ก๊ทธ๋๋ฐ ์ธ์ด/C
![[์๋ฃ๊ตฌ์กฐ] ๊ทธ๋ํ ํ์ (DFS, BFS)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLA3xx%2FbtrGElpUwcp%2F9PZ1KP88pI6Aek0YzzC4y0%2Fimg.png)
[์๋ฃ๊ตฌ์กฐ] ๊ทธ๋ํ ํ์ (DFS, BFS)
[ ๊ทธ๋ํ์ ํ์ ] ๋๋ณด๊ธฐ - ๊ทธ๋ํ์ ํ์ โ ํ๋์ ์ ์ ์ผ๋ก๋ถํฐ ์์ํ์ฌ ์ฐจ๋ก๋๋ก ๋ชจ๋ ์ ์ ๋ค์ ํ๋ฒ์ฉ ๋ฐฉ๋ฌธํ์ฌ ํ์ํ๋ ๊ฒ ๋ง์ ๋ฌธ์ ๋ค์ด ๋จ์ ๊ทธ๋ํ์ ๋ ธ๋(์ ์ )๋ฅผ ํ์ํ๋ ๊ฒ์ผ๋ก ํด๊ฒฐ ๊ฐ๋ฅํจ - ํ์ ๋ฐฉ๋ฒ โ ๊น์ด ์ฐ์ ํ์ ( DFS : Depth First Search ) ๋๋น ์ฐ์ ํ์ ( BFS : Breath First Search ) [ ๊น์ด ์ฐ์ ํ์ (DFS) ] ๋๋ณด๊ธฐ - ๊น์ด ์ฐ์ ํ์ (DFS) โ ํธ๋ฆฌ๋ ๊ทธ๋ํ์์ ํ ๋ฃจํธ๋ก ํ์ํ๋ค๊ฐ ํน์ ์ํฉ์์ ์ต๋ํ ๊น์ด ๋ค์ด๊ฐ์ ํ์ธํ ๋ค ๋ค์ ๋์๊ฐ ๋ค๋ฅธ ๋ฃจํธ๋ก ํ์ํ๋ ํ์ ๋ฐฉ๋ฒ์ด๋ค. ์ฃผ๋ก ์คํ์ ์ฌ์ฉํ์ฌ ๊ตฌํ, ๋จ์ ํ์ ์๋ ์์ฒด๋ ๋๋น ์ฐ์ ํ์ (BFS)์ ๋นํด ๋๋ฆผ. ํ์์ด ์๋ ์ํ๋ฅผ ํ ๊ฒฝ์ฐ ์์ฃผ ์ฌ์ฉํ๋ค โ ๊ฐ๋ฆผ..
![[์๋ฃ๊ตฌ์กฐ] ๊ทธ๋ํ](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdemqSy%2FbtrF5IdCJdy%2FfXwnFvmI5Skouat13kQG90%2Fimg.png)
[์๋ฃ๊ตฌ์กฐ] ๊ทธ๋ํ
[ ๊ทธ๋ํ ] ๋๋ณด๊ธฐ - ๊ทธ๋ํ (Graph) โ ๊ทธ๋ํ๋ ์ ์ (Vertex)๊ณผ ์ ์ ๋ค์ ์ฐ๊ฒฐํ๋ ๊ฐ์ (Edge)์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ ์๋ฃ๊ตฌ์กฐ ์ด๋ก ์ ์ผ๋ก ํ๋ ฌ๊ณผ ๋ฆฌ์คํธ ๋๊ฐ์ ํํ๋ก ๊ตฌํ์ด ๊ฐ๋ฅํ๋ ์ต์ ์ ํํ๋ ๋ ๊ตฌ์กฐ์ ์กฐํฉ๋ ํํ๋ฅผ ๋๊ณ ์์ [ ๊ฐ์ค ๊ทธ๋ํ ] ๋๋ณด๊ธฐ - ๊ฐ์ค ๊ทธ๋ํ (Weight Graph) โ ์ ์ ๊ณผ ์ ์ ์ฌ์ด๋ฅผ ์๋ ๊ฐ์ ์ ๊ฐ์ค์น๊ฐ ์ฃผ์ด์ง ๊ทธ๋ํ๋ฅผ ๋งํ๋ค. ๊ฐ์ค ๊ทธ๋ํ ์ค ์ ํฅ ๊ทธ๋ํ๋ฅผ ๋คํธ์ํฌ(Network)๋ผ๊ณ ๋ ํ๋ค. ๊ฐ ์ ์ ๋ค์ ๋์, ๊ฐ์ ๋ค์ ๋๋ก๋ผ๊ณ ๊ฐ์ ํ๋ค๋ฉด ๊ฐ์ค์น๋ ๊ฐ ๋๋ก๋ฅผ ์ง๋๊ธฐ ์ํ ๋น์ฉ์ด๋ ๋์ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฑ์ ๊ฐ์ผ๋ก ๊ณ์ฐ ๊ฐ๋ฅ [ ๋ถ๋ถ ๊ทธ๋ํ / ์ ๋ ๋ถ๋ถ ๊ทธ๋ํ ] ๋๋ณด๊ธฐ - ๋ถ๋ถ ๊ทธ๋ํ (Subgraph) โ ์ด๋ ํ ๊ทธ๋ํ์ ์ ์ ๊ณผ ๊ฐ์ ๊ฐ์ด๋ฐ ์ผ๋ถ๋ก..
![[์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ (2)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fca8Lra%2FbtrDaowRHPM%2FMt66LjSwjY8ObPVGxYDzk1%2Fimg.png)
[์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ (2)
ใ ํธ๋ฆฌ ใ [ ์ด์งํธ๋ฆฌ์ ์ํ ] ๋๋ณด๊ธฐ - ์ ์์ํ(Preorder) โ ์ํ ์์ : ๋ฃจํธ → ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ → ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ์์๋ก ์ํ (VLR) // C code // ์ ์ ์ํ void preorder(TreeNode* root) { if (root != NULL) { printf("[%2d] ", root->data); preorder(root->left); preorder(root->right); } } - ์ค์์ํ(Inorder) โ ์ํ ์์ : ์ผ์ชฝ ์๋ธํธ๋ฆฌ → ๋ฃจํธ → ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ ์์๋ก ์ํ (LVR) // C code // ์ค์ ์ํ void inorder(TreeNode* root) { if (root != NULL) { inorder(root->left); print..
![[์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ (1)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3irZ0%2FbtrC9mLBY1y%2FoWwH0ehlkXPz2wD9FPKq7K%2Fimg.png)
[์๋ฃ๊ตฌ์กฐ] ํธ๋ฆฌ (1)
ใ ํธ๋ฆฌ(Tree) ใ [ ํธ๋ฆฌ์ ๊ฐ๋ ] - ๋ฆฌ์คํธ, ์คํ, ํ ๋ฑ๊ณผ ๊ฐ์ ์๋ฃ๊ตฌ์กฐ๋ ๋ฐ์ดํฐ๊ฐ ์์ฐจ์ ์ผ๋ก ๋์ด๋ ์ ํ ๊ตฌ์กฐ์ - ํธ๋ฆฌ๋ ๋ฐ์ดํฐ๊ฐ ๊ณ์ธต์ ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๋ ๋น์ ํ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑ๋์ด ์์ - ๋ถ๋ชจ์ ์์ ๊ด๊ณ์ ๋ ธ๋๋ค๋ก ๊ตฌ์ฑ๋์ด ์์ - ์ธ๊ณต์ง๋ฅ ํ์ต์์ ์ฌ์ฉ๋๋ ๊ฒฐ์ ํธ๋ฆฌ(decision tree), PC์ ํด๋ ๊ตฌ์กฐ ๋ฑ๊ณผ ๊ฐ์ด ๊ณ์ธต์ ์ธ ์กฐ์ง์ ํํํ ๋ ์ฃผ๋ก ์ฌ์ฉ [ ํธ๋ฆฌ์ ์ฉ์ด ] ๋ ธ๋ : ํธ๋ฆฌ์ ๊ตฌ์ฑ ์์ ๋จ๋ง ๋ ธ๋ / ๋ฆฌํ ๋ ธ๋(terminal node / leaf node) : ์์์ด ์๋ ๋ ธ๋ ๋น๋จ๋ง๋ ธ๋(internal node) : ์ ์ด๋ ํ๋ ์ด์์ ์์์ ๊ฐ์ง๋ ๋ ธ๋ ๋ฃจํธ ๋ ธ๋(root node) : ํธ๋ฆฌ์ ์ต์์ ๋ ธ๋๋ก์จ ๋ถ๋ชจ ๋ ธ๋ x ์๋ธ ํธ๋ฆฌ(sub tree) : ํ๋์..
![[์๋ฃ๊ตฌ์กฐ] ์ฐ๊ฒฐ๋ฆฌ์คํธ (2)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdoVPjP%2FbtrCI274SQV%2FrsigCtTCUGIqfsWrAoD9uk%2Fimg.png)
[์๋ฃ๊ตฌ์กฐ] ์ฐ๊ฒฐ๋ฆฌ์คํธ (2)
ใ ์ํ ์ฐ๊ฒฐ๋ฆฌ์คํธ ใ - ๋ง์ง๋ง ๋ ธ๋์ ๋งํฌ๊ฐ ์ฒซ ๋ฒ์งธ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ - ์ญ์ ๋ ์ฝ์ ์ ํญ์ ์ ํ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ๊ฐ ํ์ํจ - ๋ณดํต ํค๋ ํฌ์ธํฐ๊ฐ ๋ง์ง๋ง ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๊ฒ๋ ๊ตฌ์ฑํจ - ๋ฆฌ์คํธ์ ์ฒ์์ด๋ ๋ง์ง๋ง์ ๋ ธ๋๋ฅผ ์ฝ์ ํ๋ ์ฐ์ฐ์ด ๋จ์ ์ฐ๊ฒฐ๋ฆฌ์คํธ์ ๋นํด ์ฉ์ด [ insert_first() ํจ์ ] // C code // ํด๋น ๋ ธ๋์ ์์ ๋ ธ๋๋ฅผ ์ฝ์ ํ๋ ํจ์ ListNode* insert_first(ListNode* head, element value) { ListNode* node = (ListNode*)malloc(sizeof(ListNode)); node->data = value; if (head == NULL) { head = node; node->link = head; ..