โถํ
๐๊ฒ์
์์ฐจ ๊ฒ์ =์ ํ ๊ฒ์
์ด์ง ๊ฒ์ = ์ด๋ถ ๊ฒ์ = ๋ณด๊ฐ ๊ฒ์
โถํธ๋ฆฌ
ํธ๋ฆฌ ์ฉ์ด
์ด์งํธ๋ฆฌ
์ผ๋ฐํธ๋ฆฌ → ์ด์งํธ๋ฆฌ
์ด์งํธ๋ฆฌ ์ข
๋ฅ
์์ ์ด์ง ํธ๋ฆฌ
ํฌํ ์ด์ง ํธ๋ฆฌ
ํธํฅ ์ด์งํธ๋ฆฌ
ํ
MAX HEAP = ์ต๋ ํํ
MIN HEAP = ์ต์ ํํ
ํ ์ฝ์
์ฐ์ฐ
ํ ์ญ์ ์ฐ์ฐ
์ด์งํธ๋ฆฌ ๊ตฌํ
๋ฐฐ์ด
๋ฆฌ์คํธ (ํฌ์ธํฐ)
๐์ด์ง ํธ๋ฆฌ ์ํ (D L R)
์ ์ ์ํ preorder
์ค์ ์ํ inorder
ํ์ ์ํ postorder
์ค์ ํ๊ธฐ์ (์ค์ ์ํ)
ํ์ ํ๊ธฐ์ (ํ์ ์ํ)
์์ฉ ํ๋ก๊ทธ๋จ :: ํ์ผ (ํ์ ์ํ)
๐ ์ด์ง ํ์ ํธ๋ฆฌ
ํ์ ์ฐ์ฐ
์ฝ์
์ฐ์ฐ
์ญ์ ์ฐ์ฐ
๐์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
๋ฒ๋ธ์ ๋ ฌ
์ฝ์
์ ๋ ฌ
์ ํ์ ๋ ฌ
๋ณํฉ์ ๋ ฌ
ํต์ ๋ ฌ
ํ์ ๋ ฌ
์ต๋ํํ : ์์์ ๊ฐ์ ๋งํผ ์ญ์ ์ฐ์ฐ์ ์ํํ์ฌ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ
์ต์ํํ : ์์์ ๊ฐ์ ๋งํผ ์ญ์ ์ฐ์ฐ์ ์ํํ์ฌ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ
โถํ๋
ธ์ดํ (FOR๋ฌธ ๋ณ๊ฒฝ)
โถ๊ทธ๋ํ
๊ทธ๋ํ ์ ์
๋ฌด๋ฐฉํฅ ๊ทธ๋ํ
๋ฐฉํฅ ๊ทธ๋ํ
1-1. ์ธ์ ํ๋ ฌ
1-2.ํฌ์ํ๋ ฌ
2. ์ธ์ ๋ฆฌ์คํธ
3.์ธ์ ๋ฐฐ์ด
๐๊ทธ๋ํ ์ํ
1. DFS ๊น์ด์ฐ์ ํ์ (์คํ) /์ → ์๋
2. BFS ๋๋น์ฐ์ ํ์ (ํ) /์ข → ์ฐ
๐์ ์ฅํธ๋ฆฌ
์ ์ฅํธ๋ฆฌ
์ต์ ์ ์ฅ ํธ๋ฆฌ
1. ์ฟ ๋ฅด์ค์นผ ์๊ณ ๋ฆฌ์ฆ(1,๋ด๋ฆผ์ฐจ์)
1-2) ์ฟ ๋ฅด์ค์นผ ์๊ณ ๋ฆฌ์ฆ (2 ์ค๋ฆ์ฐจ์0
2. ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ
โถํ
๐๊ฒ์
์์ฐจ ๊ฒ์ =์ ํ ๊ฒ์
์ผ๋ ฌ๋ก ๋ ์๋ฃ๋ฅผ ์ฒ์๋ถํฐ ๋ง์ง๋ง๊น์ง ์์๋๋ก ๊ฒ์ํ๋ ๋ฐฉ๋ฒ
๋ฐฐ์ด, ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ๊ตฌํ๋ ์์ฐจ ์๋ฃ๊ตฌ์กฐ์์ ์ฌ์ฉํ๋ ๊ฒ์
๋นํจ์จ์ ์ด์ง๋ง ์๊ณ ๋ฆฌ์ฆ์ด ๊ตฌํ์ด ์ฌ์
์ฒซ๋ฒ์งธ ์์๋ถํฐ ๋ง์ง๋ง ์์๊น์ง ์์๋๋ก ํค๊ฐ ์ผ์นํ๋ ์์๊ฐ ์๋์ง ๋น๊ตํ๋ฉฐ ์ฐพ์
- ์ ๋ ฌ๋์ง ์์ ์๋ฃ
ํ๋ํ๋ ์์๋๋ก ๊ฐ์ ๊ฐ์ด ์๋์ง ๋น๊ตํด๋๊ฐ๋ฉด ๋จ
![](https://blog.kakaocdn.net/dn/8TI4O/btsGqvMrdka/nwhZDKeYG40pKs4t0v27F0/img.png)
- ์ ๋ ฌ๋ ์๋ฃ
ํค ๊ฐ๋ณด๋ค ํฌ๋ฉด ๋์ด์ ์๋ ๊ฒ์ด๋ฏ๋ก ๊ฒ์ ์คํจ๋ฅผ ๋น ๋ฅด๊ฒ ์ ์ ์์
![](https://blog.kakaocdn.net/dn/b2hBG3/btsGquz5ALN/pLnclVfQ8eQQokH8CEKkgk/img.png)
#include <stdio.h>
typedef int element;
//์ ๋ ฌ๋์ง ์์ ์๋ฃ
void sequentialSearch1(element a[], int n, int key) {
int i = 0;
printf("\n %d๋ฅผ ๊ฒ์ํ๋ผ! ->> ", key);
while (i<n && a[i] != key) i++;
if (i<n) printf("%d ๋ฒ์งธ์ ๊ฒ์ ์ฑ๊ณต! \n\n", i + 1);
else printf("%d๋ฒ์งธ์ ๊ฒ์ ์คํจ! \n\n", i + 1);
}
void main() {
element a[] = { 8, 30, 1, 9, 11, 19, 2 };
int n = 7;
sequentialSearch1(a, n, 9); // ๋ฐฐ์ด a์ n๊ฐ ์์ ์ค์์ ํ์ํค๊ฐ 9์ธ ์์ ๊ฒ์
sequentialSearch1(a, n, 6); // ๋ฐฐ์ด a์ n๊ฐ ์์ ์ค์์ ํ์ํค๊ฐ 6์ธ ์์ ๊ฒ์
getchar();
}
#include <stdio.h>
typedef int element;
// ์ ๋ ฌ๋ ์๋ฃ = ํ๊ท ๋น๊ต ํ์๊ฐ ๋ฐ์ผ๋ก ์ค์ด๋ฌ ( ์ด๋ฏธ ์ ๋ ฌ์ด ๋์ด์์)
void sequentialSearch2(element a[], int n, element key) {
int i = 0;
printf("\n %d๋ฅผ ๊ฒ์ํ๋ผ! ->> ", key);
while (a[i] < key)
i++;
if (a[i] == key) printf("%d๋ฒ์งธ์ ๊ฒ์ ์ฑ๊ณต!\n\n", i + 1); //์ฐพ์๊ฒฝ์ฐ
else printf("%d๋ฒ์งธ์ ๊ฒ์ ์คํจ! \n\n", i + 1); // ํฐ ๊ฒฝ์ฐ = ๊ฐ์ ๊ฒฝ์ฐ๊ฐ ์์
}
void main() {
element a[] = { 1, 2, 8, 9, 11, 19, 29 };
int n = 7;
sequentialSearch2(a, n, 9); // ๋ฐฐ์ด a์ n๊ฐ ์์ ์ค์์ ํ์ํค๊ฐ 9์ธ ์์ ๊ฒ์
sequentialSearch2(a, n, 6); // ๋ฐฐ์ด a์ n๊ฐ ์์ ์ค์์ ํ์ํค๊ฐ 6์ธ ์์ ๊ฒ์
getchar();
}
//๊ณตํต์ผ๋ก ์
๋ ฅํ ๊ฐ ์๋์ง ์ฐพ๋ ์๊ณ ๋ฆฌ์ฆ
#include <stdio.h>
#define MAX 10
int main() {
int a, b;
int u, d;
int UP[MAX], DN[MAX];
printf("์ฒซ๋ฒ์งธ ์ค ์
๋ ฅ ๋ฐ์ดํฐ ์ : ");
scanf_s("%d", &u);
printf("์ฒซ๋ฒ์งธ ์ค ๋ฐ์ดํฐ %d ๊ฐ ์
๋ ฅ: ", u);
for (a = 0; a < u; a++) {
scanf_s("%d", &UP[a]);
}
printf("๋๋ฒ์งธ ์ค ์
๋ ฅ ๋ฐ์ดํฐ ์ : ");
scanf_s("%d", &d);
printf("์ฒซ๋ฒ์งธ ์ค ๋ฐ์ดํฐ %d ๊ฐ ์
๋ ฅ: ", d);
for (b = 0; b < d; b++) {
scanf_s("%d", &DN[b]);
}
for (b = 0; b < d; b++) {
for (a = 0; a < u; a++) {
if (UP[a] == DN[b])
printf(" %d ๊ณตํต์ผ๋ก ์์ \n", UP[a]); //๊ฐ ๋ฃ์๊ฒ
}
}
return 0;
}
![](https://blog.kakaocdn.net/dn/ZM3ap/btsGqfwm8jY/Ku7UEiPVMXME65AlVQRG51/img.png)
//๊ณผ์ []
#include <stdio.h>
#define MAX 10
Search(int u, int d);
int main() {
int u, d;
printf("์ฒซ๋ฒ์งธ ์ค ์
๋ ฅ ๋ฐ์ดํฐ ์ : ");
scanf_s("%d", &u);
printf("๋๋ฒ์งธ ์ค ์
๋ ฅ ๋ฐ์ดํฐ ์ : ");
scanf_s("%d", &d);
Search(u, d);
return 0;
}
Search(int u, int d) // (1) ํจ์ ํธ์ถ ์์ผ๋ก ๋ฐ๊พธ๊ธฐ
{
int a;
int b;
int UP[MAX], DN[MAX];
printf("์ฒซ๋ฒ์งธ ์ค ๋ฐ์ดํฐ %d ๊ฐ ์
๋ ฅ: ", u);
for (a = 0; a < u; a++) {
scanf_s("%d", &UP[a]);
}
printf("๋๋ฒ์งธ ์ค ๋ฐ์ดํฐ %d ๊ฐ ์
๋ ฅ: ", d);
for (b = 0; b < d; b++) {
scanf_s("%d", &DN[b]);
}
for (b = 0; b < d; b++) {
for (a = 0; a < u; a++) {
if (UP[a] == DN[b])
printf("UP[%d]์ DN[%d]์ %d์ด ๊ณตํต์ผ๋ก ์์ \n",a,b,UP[a]);
//(2) UP์ ์ฒซ๋ฒ์งธ ์ค, DN ๋๋ฒ์งธ ์ค ์ธ๋ฑ์ค ์ถ๋ ฅํ๊ธฐ
}
}
}
์ด์ง ๊ฒ์ = ์ด๋ถ ๊ฒ์ = ๋ณด๊ฐ ๊ฒ์
์ ๋ ฌ๋ ์๋ฃ์ ๋ํด์ ์ํํ๋ ๊ฒ์ ๋ฐฉ๋ฒ
์ค๊ฐ์ ์๋ ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ก๊ณ
์ฐพ์ ๊ฐ / ๊ธฐ์ค๊ฐ ๋น๊ต ( ํฌ๋ฉด ์ค๋ฅธ์ชฝ, ์์ผ๋ฉด ์ผ์ชฝ ) → ๊ณ์ํด์ ๊ธฐ์ค๊ฐ ๋ณ๊ฒฝํด๊ฐ.
๊ธฐ์ค๊ฐ :: ๋ฐฐ์ด์ ์ค๊ฐ์ ์๋ ๊ฐ == // middle ← (begin + end / 2)
** ์ฌ๊ทํจ์, ์ํ๋ฌธ ๋๊ฐ์ง ํํ ์ฝ๋ ์์
โถํธ๋ฆฌ
- ์ฌ์ดํด์ด ์์
ํธ๋ฆฌ ์ฉ์ด
์ด์งํธ๋ฆฌ
์ผ๋ฐํธ๋ฆฌ → ์ด์งํธ๋ฆฌ
![](https://blog.kakaocdn.net/dn/OgCRS/btsGrUEsgLi/ZWrtijKRIOaytwf1yph3o1/img.png)
์ด์งํธ๋ฆฌ ์ข ๋ฅ
![](https://blog.kakaocdn.net/dn/Dnh8r/btsGqOZihEF/KVzaK8P2tSeCQPIfMDJ3vk/img.png)
์์ ์ด์ง ํธ๋ฆฌ
- ๋ ธ๋ ์์น๊ฐ ํฌํ ์ด์งํธ๋ฆฌ์์ ๋ ธ๋ 1~n๊น์ง์ ์์น์ ์์ ํ ์ผ์นํ๋ ์ด์งํธ๋ฆฌ
ํฌํ ์ด์ง ํธ๋ฆฌ
- ๋ชจ๋ ๋ ๋ฒจ์ ๋ ธ๋๊ฐ ํฌํ ์ํ๋ก ์ฐจ ์์
ํธํฅ ์ด์งํธ๋ฆฌ
- ๋ชจ๋ ๋ ธ๋๊ฐ ์ผ์ชฝ or ์ค๋ฅธ์ชฝ ์ค ํ ๋ฐฉํฅ์ผ๋ก๋ง ์๋ธํธ๋ฆฌ๋ฅผ ๊ฐ์ง๊ณ ์๋ ํธ๋ฆฌ
ํ
- ์์ ์ด์ง ํธ๋ฆฌ์ ์๋ ๋ ธ๋ ์ค์์ ํค ๊ฐ์ด ๊ฐ์ฅ ํฐ, ๊ฐ์ฅ ์์ ๋ ธ๋๋ฅผ ์ฐพ๊ธฐ ์ํด์ ๋ง๋ ์๋ฃ๊ตฌ์กฐ
![](https://blog.kakaocdn.net/dn/cCK3Mt/btsGq148EaJ/RKGFvGcdl9HD0ILxKIDXu1/img.png)
MAX HEAP = ์ต๋ ํํ
- ๋ฃจํธ ๋ ธ๋(ํค๊ฐ)๊ฐ ๊ฐ์ฅ ํผ
MIN HEAP = ์ต์ ํํ
- ๋ฃจํธ ๋ ธ๋(ํค๊ฐ)๊ฐ ๊ฐ์ฅ ์์
ํ ์ฝ์ ์ฐ์ฐ
![](https://blog.kakaocdn.net/dn/nt1lH/btsGqsvxwnJ/heTbVG4XJDqTy0YQgaRy2k/img.png)
- ๋ ธ๋๋ฅผ ํ์ฅ์ํด
- ํ์ฌ ์์น์์ ๋ถ๋ชจ๋ ธ๋์์ ๊ฐ ํฌ๊ธฐ๋ฅผ ๋น๊ตํจ
- ๊ตํํ๊ฑฐ๋ ํด์ ์๋ฆฌ ํ์ ์ํด
ํ ์ญ์ ์ฐ์ฐ
![](https://blog.kakaocdn.net/dn/cNSfVh/btsGrck74gT/uDxmKUziRQpTzLdENx8qY0/img.png)
- ๋ฃจํธ ๋ ธ๋์ ์์๋ง ์ญ์ ๊ฐ๋ฅํจ
- ์์ ์ด์ง ํธ๋ฆฌ๋ฅผ ์ ์งํด์ผ๋๊ธฐ ๋๋ฌธ์ ๋ง์ง๋ง๋ ธ๋ n๋ฒ ๋ ธ๋๋ฅผ ์ญ์
- ๋ฃจํธ ๋ ธ๋์ ์์ ์ ์ฅ ํ ํ ์ ์๋ฆฌ๋ฅผ ์ฐพ์๊ฐ๋ฉด ๋จ
์ด์งํธ๋ฆฌ ๊ตฌํ
๋ฐฐ์ด
๋ฆฌ์คํธ (ํฌ์ธํฐ)
๐์ด์ง ํธ๋ฆฌ ์ํ (D L R)
- ๋ชจ๋ ์์๋ฅผ ๋น ํธ๋ฆฌ๊ฑฐ๋ ๋ถ๋ณตํ์ง ์๊ณ ์ฒ๋ฆฌํ๋ ์ฐ์ฐ
- ๋ฃจํธ ๋ฐฉ๋ฌธ ์๊ธฐ์ ๋ฐ๋ผ ๊ตฌ๋ถ๋จ
์ ์ ์ํ preorder
- ๋ฃจํธ ๋ ธ๋๋ฅผ ๋จผ์ ๋ฐฉ๋ฌธ
![](https://blog.kakaocdn.net/dn/V7aeX/btsGssVg71x/QknP8ZROmh1qWApsGKwmJK/img.png)
์ค์ ์ํ inorder
- ๋ฃจํธ ๋ ธ๋๋ฅผ ์ค๊ฐ์ ๋ฐฉ๋ฌธ
![](https://blog.kakaocdn.net/dn/chjVia/btsGp1ZoUZX/TIDcE794TwS7WRTfkhZeok/img.png)
ํ์ ์ํ postorder
- ๋ฃจํธ ๋ ธ๋๋ฅผ ๋ง์ง๋ง์ ๋ฐฉ๋ฌธ
![](https://blog.kakaocdn.net/dn/4VkxG/btsGtm8lgM8/TOC0fS7SIDKi4FxH54BS6K/img.png)
์ค์ ํ๊ธฐ์ (์ค์ ์ํ)
ํ์ ํ๊ธฐ์ (ํ์ ์ํ)
์์ฉ ํ๋ก๊ทธ๋จ :: ํ์ผ (ํ์ ์ํ)
- ํ์ ์ํ ํ๋ฉด์ ํด๋ ์ฉ๋์ ๊ณ์ฐํจ
#include <stdio.h>
#include <stdlib.h>
#include <memory.h>
typedef struct treeNode { // ํธ๋ฆฌ์ ๋
ธ๋ ๊ตฌ์กฐ ์ ์
int size; // ๋ฐ์ดํฐ ํ๋
struct treeNode* left; // ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ์ ๋ํ ๋งํฌ ํ๋
struct treeNode* right; // ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ์ ๋ํ ๋งํฌ ํ๋
} treeNode;
int AmountSize = 0;
// size๋ฅผ ๋ฃจํธ ๋
ธ๋์ ๋ฐ์ดํฐ ํ๋๋ก ํ์ฌ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ๋ฅผ ์ฐ๊ฒฐํ๋ ์ฐ์ฐ
treeNode* makeRootNode(int size, treeNode* leftNode, treeNode* rightNode) {
treeNode* root = (treeNode*)malloc(sizeof(treeNode));
root->size = size;
root->left = leftNode;
root->right = rightNode;
return root;
}
// ๊ฐ ํด๋ ํฌ๊ธฐ๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํ ํ์ ์ํ ์ฐ์ฐ
int postorder_AmountSize(treeNode* root) {
if (root) {
postorder_AmountSize(root->left);
postorder_AmountSize(root->right);
AmountSize += root->size;
}
return AmountSize;
}
void main() {
treeNode* F11 = makeRootNode(50, NULL, NULL);
treeNode* F10 = makeRootNode(40, NULL, NULL);
treeNode* F9 = makeRootNode(45, NULL, NULL);
treeNode* F8 = makeRootNode(30, NULL, NULL);
treeNode* F7 = makeRootNode(0, NULL, NULL);
treeNode* F6 = makeRootNode(65, F10, F11);
treeNode* F5 = makeRootNode(100, NULL, NULL);
treeNode* F4 = makeRootNode(0, F8, F9);
treeNode* F3 = makeRootNode(0, F6, F7);
treeNode* F2 = makeRootNode(0, F4, F5);
treeNode* F1 = makeRootNode(0, F2, F3);
printf("\n\n ๊ณตํ๊ณ์ด ๋ชจ๊ธ์ก : %d M \n", postorder_AmountSize(F2));
AmountSize = 0;
printf("\n ์์ฐ๊ณ์ด ๋ชจ๊ธ์ก : %d M \n", postorder_AmountSize(F3));
AmountSize = 0;
printf("\n ํ๊ณผ ์ ์ฒด ๋ชจ๊ธ์ก : %d M \n", postorder_AmountSize(F1));
getchar();
}
๐ ์ด์ง ํ์ ํธ๋ฆฌ
- ์์์ ํฌ๊ธฐ์ ๋ฐ๋ผ ๋ ธ๋ ์์น๋ฅผ ์ ์ ํ ๊ฒ
์๋ก ๋ค๋ฅธ ์ ์ผํ ํค๋ฅผ ๊ฐ์ง
R ๋ ๋ฃจํธ ํค๋ณด๋ค ์์
L์ ๋ฃจํธ ํค ๋ณด๋ค ์ปค์ผ๋จ
- ์ผ์ชฝ < ๋ฃจํธ < ์ค๋ฅธ์ชฝ
ํ์ ์ฐ์ฐ
- ๋ฃจํธ์์ ์์
- ํ์ํ ํค ๊ฐ ↔ ๋ฃจํธ๋ ธ๋ ํค๊ฐ ๋น๊ต
- ํค๊ฐ = ๋ฃจํธ๋ ธ๋ํค๊ฐ : ํ์์ฐ์ฐ์ฑ๊ณต
- ํค๊ฐ < ๋ฃจํธ๋ ธ๋ํค๊ฐ ์ผ์ชฝ ์๋ธํธ๋ฆฌ๋ก ํ์์ฐ์ฐ์ํ
- ํค๊ฐ > ๋ฃจํธ๋ ธ๋ํค๊ฐ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๋ก ํ์์ฐ์ฐ์ํ
์ฝ์ ์ฐ์ฐ
- ํ์ ์ฐ์ฐ ์ํํด์ผ๋จ
- ์ฝ์ ํ ์์๋ ๊ฐ์ ์์๊ฐ ์์ผ๋ฉด ์ฝ์ ๋ถ๊ฐ๋ฅํจ
- ํ์์ํ์ด ์คํจ๋๋ ๊ทธ ์๋ฆฌ์ ์์๋ฅผ ์ฝ์ ํจ
![](https://blog.kakaocdn.net/dn/onU5K/btsGsqXrHDG/EEujHJMtoXH20WvrXEZikK/img.png)
์ญ์ ์ฐ์ฐ
- ํ์์ฐ์ฐ์ ์ํ (์ญ์ ๋ ธ๋ ์์น๋ฅผ ์์์ผํจ)
- ํ์ํ์ฌ ์ฐพ์ ๋ ธ๋๋ฅผ ์ญ์ ํจ
- ์ด์ ํ์์ฒ๋ฆฌ๋ฅผ ํด์ค์ผ๋จ (์ด์ง ํ์ ํธ๋ฆฌ ์ ์งํด์ค์ผ๋จ)
- ๋จ๋ง๋ ธ๋ (์ฐจ์=0)
- ์์ ๋ ธ๋ ํ๊ฐ
- ๋ถ๋ชจ๋ ธ๋ ์๋ฆฌ๋ฅผ ์์๋ ธ๋์๊ฒ ๋ฌผ๋ ค์ค๋ค
- ์์ ๋ ธ๋ ๋๊ฐ
- ๋ถ๋ชจ๋ ธ๋ ์๋ฆฌ๋ฅผ ์์๋ ธ๋์๊ฒ ๋ฌผ๋ ค์ค๋ค
- ํ๊ณ์ ์ ํ๋ฐฉ๋ฒ :
์ญ์ ๋ ธ๋์ ์์นํด์ผํ ๊ฐ์ ์ผ์ชฝ ์๋ธ ํธ๋ฆฌ์ ์๋ ๋ ธ๋๋ค์ ๊ฐ๋ณด๋ค ์ปค์ผํ๊ณ , ์ค๋ฅธ์ชฝ ์๋ธ ํธ๋ฆฌ์ ์๋ ๋ ธ๋๋ค์ ํค๊ฐ๋ณด๋ค๋ ์์์ผํ๋ค.
์ถ์ฒ:
[์์ ธ๋ฏธ]
- ์ผ์ชฝ ์๋ธํธ๋ฆฌ : ๊ฐ์ฅ ํฐ ์์๋ ธ๋ ์ ํ
- ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ : ๊ฐ์ ์์ ์์๋ ธ๋ ์ ํ
![](https://blog.kakaocdn.net/dn/bsnFTD/btsGp2qw72V/oOob5RkMz3Y7PkszGY4420/img.png)
![](https://blog.kakaocdn.net/dn/xaJuq/btsGrTlkoqW/HYvnksxN1055BEFXV6DRc0/img.png)
![](https://blog.kakaocdn.net/dn/cPzWsy/btsGpWKDuHB/uoMrR6VreNdk7AThGKygdK/img.png)
๐์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ
- ๋ฐ์ดํฐ๋ฅผ ์ผ์ ํ ๊ท์น์ ๋ฐ๋ผ ๋ค์ ๋์ดํ๋ ๊ฒ
๋ฒ๋ธ์ ๋ ฌ
- ์ธ์ ํ ๋๊ฐ์ฉ ๋น๊ตํ๋ค.
์ฝ์ ์ ๋ ฌ
- ๋ฏธ์ ๋ ฌ ์ฒซ๋ฒ์งธ๋ฅผ ์ ๋ ฌ๋ ๊ณณ๊ณผ ๋น๊ต
์ ํ์ ๋ ฌ
- ๋ฏธ์ ๋ ฌ ๋ ๊ณณ์์ ์ ํ ํ ๋ฏธ์ ๋ ฌ ๋ ์ฒซ๋ฒ์งธ ์ ๊ตํ
๋ณํฉ์ ๋ ฌ
- ๋ฐฐ์ด์ ๋ ๊ฐ๋ก ์ชผ๊ฐ์ (์ต์ ๋จ์ 1๊ฐ๋ก ๋ถํ ) ์ ๋ ฌํ ๋ค ๋ค์ ๋ณํฉํ๋ ์์
- *๋ถํ ์ ๋ณต๋ฐฉ๋ฒ
- ๋ถํ → ์ ๋ณต → ๊ฒฐํฉ
![](https://blog.kakaocdn.net/dn/bZ826P/btsGpZm1j7p/ZV3KbjeYRwA1dTrr8jOf2K/img.png)
![](https://blog.kakaocdn.net/dn/dIqct8/btsGqwLjMQy/hnilsoKbsQrn7W6Ay7XW8k/img.png)
![](https://blog.kakaocdn.net/dn/buiVY6/btsGrTFEzGi/QLidmnTN7nuI7aWs2pIXwk/img.png)
![](https://blog.kakaocdn.net/dn/dM1vmZ/btsGqKijLj1/a78hM5492smZ70Ko77IWf0/img.png)
![](https://blog.kakaocdn.net/dn/bxvDxJ/btsGqXhr7IE/Rrb0WstvFPW82815HYKkm0/img.png)
- ๋ณํฉ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ ๋ถ์ํจ
ํต์ ๋ ฌ
![](https://blog.kakaocdn.net/dn/cD649e/btsGq2322xr/1BiiGjzKNmYntEMhvrlKMk/img.png)
![](https://blog.kakaocdn.net/dn/bic8po/btsGrQhPadA/GE4dGex88ecuoh1nwE8Ckk/img.png)
![](https://blog.kakaocdn.net/dn/eABMYS/btsGrX2gh2K/7j5KZydbLTltqQ0uQZ8pxK/img.png)
๊ธฐ์ค ๊ฐ (ํผ๋ฒ)์ ์ค์ฌ์ผ๋ก ์ผ์ชฝ ๋ถ๋ถ ์งํฉ๊ณผ ์ค๋ฅธ์ชฝ ๋ถ๋ถ ์งํฉ์ผ๋ก ๋ถํ ํ์ฌ ์ ๋ ฌ
- ๋ถํ → ์ ๋ณต
- ๊ฐ์ด๋ฐ ์์๋ฅผ ํผ๋ด์ผ๋ก ์ ํ๋ค.
- L : → / ํผ๋ด๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์์ ์ฐพ๊ธฐ
- R : ← / ํผ๋ด๋ณด๋ค ์์ ์์ ์ฐพ๊ธฐ ( ํผ๋ฒ์ ๋์ด ๊ฐ ์ ์์)
- LR์ด ๋ง๋๊ธฐ ์ ์ ์กฐ๊ฑด์ด ์ถฉ์กฑ๋๋ฉด ๊ฐ๊ฐ ์์๋ผ๋ฆฌ ๊ตํํจ (ํผ๋ฒ์ด ์ค์ ๋ ๊ฑด ์๋)
- LR์ด ๋ง๋ ์งํ๋์ง ์์ผ๋ฉด ๊ทธ ์์์ ํผ๋ด์ ๊ตํํจ
- ๋ชจ๋ ๋ถ๋ถ ์งํฉ์ ํฌ๊ธฐ๊ฐ 1 ์ดํ๊ฐ ๋๋ฉด ์ ์ฒด ํต ์ ๋ ฌ์ ์ข ๋ฃํจ
- ใ
ํ์ ๋ ฌ
- ํํ์์๋ ๊ฐ์ฅ ํฐ ์์๊ฐ ๋ฃจํธ ๋ ธ๋๊ฐ ๋๋ค. ์ญ์ ์ฐ์ฐ์ ์ํํ๋ฉด ํญ์ ๋ฃจํธ ๋ ธ๋์ ์์๋ฅผ ์ญ์ ํ์ฌ ๋ฐํ (์ญ์ ์ฐ์ฐ )
์ต๋ํํ : ์์์ ๊ฐ์ ๋งํผ ์ญ์ ์ฐ์ฐ์ ์ํํ์ฌ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌ
- ์ฝ์ ์ฐ์ฐ์ ์ด์ฉํด์ ์ต๋ํํ ๊ตฌ์ฑ
- ์ญ์ ์ฐ์ฐ์ ํตํด์ ๋ฉ๋ชจ๋ฆฌ์ ๋ค์ ์ ๋ ฌ ใน
์ต์ํํ : ์์์ ๊ฐ์ ๋งํผ ์ญ์ ์ฐ์ฐ์ ์ํํ์ฌ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ
![](https://blog.kakaocdn.net/dn/q7x3x/btsGsWu7EdJ/tKojiLVGkvNk7AQjnPvlYK/img.png)
โถํ๋ ธ์ดํ (FOR๋ฌธ ๋ณ๊ฒฝ)
#include <stdio.h>
int n, start, work, target;
void hanoi_01(int n, int start, int work, int target);
void hanoi_02(int n, int start, int target, int work);
void hanoi_03(int n, int work, int start, int target);
int main()
{
start = 'A';
work = 'B';
target = 'C';
for (int n = 3; n > 0; n--) {
if (n == 1) hanoi_01( n, start, work, target);
else if (n == 3 ) hanoi_02(n - 1, start, target, work);
else hanoi_03(n - 1, work, start, target);
}
}
void hanoi_01(int n, int start, int work, int target) {
printf("%c์์ ์๋ฐ %d๋ฅผ %c๋ก ์ฎ๊น \n", start, n, target);
}
void hanoi_02(int n, int start, int target, int work) {
//printf("%c์์ ์๋ฐ %d๋ฅผ %c๋ก ์ฎ๊น \n", start, n, target);
}
void hanoi_03(int n, int work, int start, int target) {
//printf("%c์์ ์๋ฐ %d๋ฅผ %c๋ก ์ฎ๊น \n", start, n, target);
}
โถ๊ทธ๋ํ
- ์ฌ์ดํด์ด ์์
๊ทธ๋ํ ์ ์
- ํ์์ด๋ ์ฌ๋ฌผ์ ์ ์ + ๊ฐ์ ์ผ๋ก ํํํ ๊ฒ
- Graph G = (V, E)
- ์ธ์ ํ๋ค : ๋ ์ ์ ์ด ๊ฐ์ ์ผ๋ก ์ฐ๊ฒฐ๋์ด ์๋ ์ํ
๋ฌด๋ฐฉํฅ ๊ทธ๋ํ
- ๋ฐฉํฅ์ด ์๋ ๊ทธ๋ํ
๋ฐฉํฅ ๊ทธ๋ํ
- ๋ฐฉํฅ์ด ์๋ ๊ทธ๋ํ
- ์ง์ ์ฐจ์, ์ง์ถ์ฐจ์
1-1. ์ธ์ ํ๋ ฌ
- 2์ฐจ์ ๋ฐฐ์ด๋ก ํํํจ
![](https://blog.kakaocdn.net/dn/kW2OD/btsGqh1ZbNm/dKTVwqteNi4oIS9hsSl2Ek/img.png)
![](https://blog.kakaocdn.net/dn/0nYND/btsGqsoHfLR/53uJhaYmyLLp7e5Lkhba2k/img.png)
![](https://blog.kakaocdn.net/dn/bK4s3N/btsGq9BWVof/phbNAx1IcoW0M6fq8Am2i1/img.png)
![](https://blog.kakaocdn.net/dn/Zdryz/btsGqrJ8PsG/v9fRLQrTA4br43gRRoAe3k/img.png)
1-2.ํฌ์ํ๋ ฌ
๋๋ถ๋ถ์ ๊ฐ์ด 0์ธ ๊ฒฝ์ฐ
2. ์ธ์ ๋ฆฌ์คํธ
- ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ฅผ ์ด์ฉํด ํํํจ
![](https://blog.kakaocdn.net/dn/O5ELm/btsGqq5wkuQ/F2slXiTmkNLj0MvG9xBKyk/img.png)
![](https://blog.kakaocdn.net/dn/C5hiI/btsGqu090ce/21Ug8z2tfnaRPoeCXrZFKk/img.png)
3.์ธ์ ๋ฐฐ์ด
![](https://blog.kakaocdn.net/dn/KpdV9/btsGqlJ4rcf/jMGmFfvz6SKyghlQWi7DZK/img.png)
๐๊ทธ๋ํ ์ํ
- ๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธํ๋ ๊ฒ
1. DFS ๊น์ด์ฐ์ ํ์ (์คํ) /์ → ์๋
- ์ต๋ํ ๊น์ด ํ์ํ๋ค๊ฐ ๊ฐ ๊ณณ ์ด ์์ผ๋ฉด ๊ฐ๋ฆผ๊ธธ ๊ฐ์ ์ผ๋ก ๋๋์์์ ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก ํ์์ ๊ณ์ ๋ฐ๋ณตํ๋ค.
- ๊ฐ์ฅ ๋ง์ง๋ง์ ๋ง๋ ๊ฐ๋ฆผ๊ธธ ๊ฐ์ ์ผ๋ก ๋์๊ฐ์ผ๋๊ธฐ๋๋ฌธ์ ํ์ ์ ์ถ์ ์คํ ์ฌ์ฉ
2. BFS ๋๋น์ฐ์ ํ์ (ํ) /์ข → ์ฐ
- ์ ์ ๊ณผ ์ธ์ ํ ์ ์ ์ค์ ๋ฐฉ๋ฌธํ์ง ์์ ์ ์ ์ ์ฐจ๋ก๋๋ก ๋ฐฉ๋ฌธํจ ์ด ๊ณผ์ ์ ๊ณ์ ๋ฐ๋ณต
![](https://blog.kakaocdn.net/dn/b3zlzS/btsGqLO5QmM/JpkvjOsIV4rGk8YP8ccUmk/img.png)
๐์ ์ฅํธ๋ฆฌ
์ ์ฅํธ๋ฆฌ
- ๊ฐ์ค ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ์์ ๋ชจ๋ ์ ์ ์ ํฌํจํ๋ ์ฐ๊ฒฐ๋ ํธ๋ฆฌ
- ์ ์ ์ด n๊ฐ๋ฉด ๊ฐ์ ์ n-1๊ฐ ์กด์ฌ
์ต์ ์ ์ฅ ํธ๋ฆฌ
- ์ ์ฅ ํธ๋ฆฌ ์ค์์ ๊ฐ์ ์ ๊ฐ์ค์น ํฉ์ด ๊ฐ์ฅ ์์ ํธ๋ฆฌ
- ์กฐ๊ฑด : ๋ฌด๋ฐฉํฅ ์ฐ๊ฒฐ ๊ทธ๋ํ
- ํธ๋ฆฌ : ์ฌ์ดํด์ด ์๋ ์ฐ๊ฒฐ ๊ทธ๋ํ
1. ์ฟ ๋ฅด์ค์นผ ์๊ณ ๋ฆฌ์ฆ(1,๋ด๋ฆผ์ฐจ์)
- ๋ด๋ฆผ์ฐจ์ or ์ค๋ฆ์ฐจ์ ์ ๋ ฌ๋ถํฐ ์์
- ๊ฐ์ค์น๊ฐ ๊ฐ์ฅ ๋์ ๊ฐ์ ์ ์ ๊ฑฐํ๋ค.
- ์ฌ์ดํด์ ๋ง๋ค์ง ์์ผ๋ฉด์ ์ถ๊ฐ
1-2) ์ฟ ๋ฅด์ค์นผ ์๊ณ ๋ฆฌ์ฆ (2 ์ค๋ฆ์ฐจ์0
- ๋ด๋ฆผ์ฐจ์ or ์ค๋ฆ์ฐจ์ ์ ๋ ฌ๋ถํฐ ์์
- ๊ฐ์ค์น๊ฐ ๊ฐ์ฅ ์์ ๊ฐ์ ๋ถํฐ ์ ํ
- ์ฌ์ดํด์ ๋ง๋ค์ง ์์ผ๋ฉด์ ์ถ๊ฐ
2. ํ๋ฆผ ์๊ณ ๋ฆฌ์ฆ
- ๊ฐ์ ์ ๋ ฌํ์ง ์๊ณ ์์
- ์ ์ ์์ ์์ํ์ฌ (๋ณธ์ธ์ด ์ ํ)
- ์ ํํ ์ ์ ์ ๋ถ์๋ ๋ชจ๋ ๊ฐ์ ์ค ๊ฐ์ค์น๊ฐ ๊ฐ์ฅ ๋ฎ์ ๊ฐ์ ์ ์ฐ๊ฒฐํด์ ํธ๋ฆฌ๋ฅผ ํ์ฅ