ํด์ํจ์์ ํจ๊ป ๋ฐ์ดํฐ ๊ฒ์์ ํจ์จ์ ์ผ๋ก ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ตฌ์กฐ
ํค(key)์ ๊ฐ(value)์ด ํ ์์ ์ด๋ฃจ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
ํน์ ํค๊ฐ K๋ฅผ ๊ฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ๋ ๋ฌธ์ ์์ ํ์ฉ
์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ ํํ์์ผ๋ก ๊ตฌํ ์๋ ์์ง๋ง, ๋ฐ์ดํฐ ์์ ๋น๋กํด์ ๊ณ์ฐ์๊ฐ์ด ๋์ด๋๋ค๋ ๋จ์ ์ด ์๋ค.
๋ฐฐ์ด ํ์์ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ฏ๋ก, ์ ํฉํ์ง ์์ ๊ตฌ์กฐ ๐ ํด์ํ ์ด๋ธ์ ๋ฑ์ฅ
๐ฉ ๋ฐฐ์ด์ ๋ง๋ค๊ณ ๋ฐ์ดํฐ๋ฅผ ์ถ๊ฐํ ๋, 'ํด์ ํจ์' ์ด์ฉ
ํค ๊ฐ์ ํด์ ํ ์ด๋ธ์ ์ฃผ์๋ก ๋ณํํ๋ ํจ์
๊ณ์ฐ์ด ์ฉ์ดํด์ผ ํ๋ฉฐ, ์ ์ ์ถฉ๋ ๋ฐ์ ๐ ๊ฐ ํค๋ฅผ ํ ์ด๋ธ์ ๊ฐ ์ฌ๋กฏ์ ๊ท ๋ฑํ๊ฒ ์ฌ์์ํฌ ์ ์์ด์ผ
๐ ํด์ ํจ์์ ์ข ๋ฅ
1. ์ ์ฐ์์ฌ๋ฒ
ํค ๊ฐ์ ํด์ ํจ์์ ๋ฃ์ด ๋์ค๋ ํด์๊ฐ์ ๋ฐฐ์ด์ ๊ฐฏ์๋ก ๋๋์ด ๋๋จธ์ง๋ฅผ ๊ตฌํ๋ค. ์) 4928 % 5 = 3
๊ตฌํ ์์ ๊ฐ์ ๋ฐฐ์ด์ 3๋ฒ ์์(a[3])์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ. ๋ค๋ฅธ ๋ฐ์ดํฐ๋ค๋ ๋ฐ๋ณต
ํค๋ฅผ ํด์ ํ ์ด๋ธ์ ์ธ๋ฑ์ค๋ก ๋ณํํ๋ ๊ณผ์ ์์ ์ฌ์ฉ
ํค๋ฅผ ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ํด๋น ํค์ ํด์ ๊ฐ์ผ๋ก ์ฌ์ฉ
EX) ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ = 10, ํค=27 ๐ 27 % 10 = 7 ๐ ํค 27์ ํด์๊ฐ 7๋ก ๋งคํ๋๋ค.
์ด ๋ฐฉ๋ฒ์ ๋จ์ํ์ง๋ง, ๊ท ์ผํ ํด์ ๊ฐ์ ์์ฑํ๊ธฐ ์ํด์๋ ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ฅผ ํค์ ์์์ ๊ด๋ จ์ํค๋ ๊ฒ์ด ์ผ๋ฐ์ ์ด๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ผ๋ถ ํค๋ค์ด ๊ฐ์ ํด์ ๊ฐ์ ๊ฐ์ง๋ ์ถฉ๋์ด ๋ฐ์ํ ์ ์๋ค. EX) ํฌ๊ธฐ๊ฐ 10์ด๊ณ ํค๊ฐ 17์ธ ๊ฒฝ์ฐ์ 27์ธ ๊ฒฝ์ฐ๋ ๊ฐ์ ํด์๊ฐ์ธ 7์ ๊ฐ์ง๋ค.
๐ ์ด๋ฌํ ์ถฉ๋์ ์ต์ํํ๊ธฐ ์ํด ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ฅผ ํค์ ์์์ ๊ด๋ จ์์ผ์ ์ ํํจ์ผ๋ก์จ ํด๊ฒฐ ๊ฐ๋ฅ
2. ๋น๋
๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃน์ผ๋ก ๋๋๋ ๊ณผ์ ์ด๋ ๋ฐฉ๋ฒ
๋ฐ์ดํฐ๋ฅผ ๊ตฌ๊ฐ(๋ฒํท)์ผ๋ก ๋๋๊ฑฐ๋ ์ด์ฐ์ ์ธ ๊ฐ์ผ๋ก ๋ณํํ์ฌ ๊ทธ๋ฃน์ ํ์ฑํ๋ค. ์ด๊ฒ์ ๋ฐ์ดํฐ๋ฅผ ๋ ์์ใด ์ธํธ๋ก ๋ถํ ํ์ฌ ๋ถ์ํ๊ธฐ ์ฝ๊ฒ ๋ง๋๋ ๊ธฐ์ ์ด๋ค. ์ฃผ๋ก ์ฐ์ํ ๋ฐ์ดํฐ๋ฅผ ์ด์ฐ์ ์ธ ๊ทธ๋ฃน์ผ๋ก ๋ณํํ๋๋ฐ ์ฌ์ฉ๋๋ค.
3. ์ค๊ฐ ์ ๊ณฑ๋ฒ
์ ๋ ฅ ๊ฐ์ ์ ๊ณฑํ ๊ฐ์ ์ค๊ฐ ๋ถ๋ถ์ ํด์ ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ ๋ฐฉ์
๋จ์ํ๊ณ ๋น ๋ฅด์ง๋ง, ์ผ๋ถ ํค์ ๋ํด ์ถฉ๋์ด ๋ฐ์ํ ์ ์์ผ๋ฉฐ, ํนํ ์ค๊ฐ ๋ถ๋ถ์ด ๋ฐ๋ณต๋๋ ๊ฒฝ์ฐ์๋ ํด์๊ฐ์ ๋ถํฌ๊ฐ ๊ท ์ผํ์ง ์์ ์ ์๋ค. ๋ํ, ์ ๋ ฅ๊ฐ์ ๋ฒ์์ ๋ฐ๋ผ ํด์๊ฐ์ ๋ถํฌ๊ฐ ํฌ๊ฒ ๋ฌ๋ผ์ง ์ ์๋ค. ๋ฐ๋ผ์ ์ค๊ฐ ์ ๊ณฑ๋ฒ์ ๊ฐ๋จํ ํด์ ํจ์๋ก ์ฌ์ฉ๋์ง๋ง, ๋ณด์์ด๋ ํฐ ๋ฐ์ดํฐ ์ ์ ๋ํ ํด์ฑ์๋ ์ ํฉํ์ง ์์ ์ ์๋ค.
1. ํค๋ฅผ ์ ๊ณฑํ๋ค.
2. ์ ๊ณฑํ ๊ฐ์ ๋ฌธ์์ด๋ก ๋ณํํ๊ณ , ์ค๊ฐ ๋ถ๋ถ์ ์ ํํ๋ค.
3. ์ ํํ ์ค๊ฐ ๋ถ๋ถ์ด ํด์ ๊ฐ์ผ๋ก ์ฌ์ฉ๋๋ค.
EX) 3์๋ฆฌ์ ์ ๋ ฅ๊ฐ 45๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์
1. 45 ์ ๊ณฑ์ 2025
2. 2025์ ๋ฌธ์์ด์ "2025", ์ค๊ฐ ๋ถ๋ถ์ "02"
3. "02"๊ฐ ํด์๊ฐ์ผ๋ก ์ฌ์ฉ๋๋ค.
๐ 45์ ํด์๊ฐ์ "02"
4. ๋ฌธ์์ด์ ์ํ ๋น๋
๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ์ด์ฐ์ ์ธ ๊ทธ๋ฃน ๋๋ ๋ฒ์ฃผ๋ก ๋๋๋ ๊ณผ์ ์ ์๋ฏธํ๋ค. ์ด๋ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ถ์ํ๋ ๊ณผ์ ์์ ์ ์ฉํ๊ฒ ํ์ฉ๋ ์ ์๋ค. ๋น๋์ ๋ฌธ์์ด ๋ฐ์ดํฐ๋ฅผ ๋ ์ฝ๊ฒ ์ฒ๋ฆฌํ๊ณ ๋ถ์ํ๊ธฐ ์ํด ์ฌ์ฉ๋ ์ ์๋ค.
1. ์ํ๋ฒณ ๊ตฌ๊ฐ ๋ถํ : ๋ฌธ์์ด์ ์ํ๋ฒณ์ ๋ฒ์ฃผ๋ก ๋๋๋ ๊ฒ. EX) ์์ด ์ํ๋ฒณ์ ์ฌ์ฉํ๋ ๋ฌธ์์ด์ ๊ฒฝ์ฐ A~Z ์ํ๋ฒณ์ ์ฌ๋ฌ ๊ทธ๋ฃน์ผ๋ก ๋๋ ์ ์๋ค.
2. ๋ฌธ์์ด ๊ธธ์ด ๊ธฐ๋ฐ ๋น๋ : ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃน์ ํ์ฑํ๋ ๊ฒ.EX) ๋ฌธ์์ด์ ๊ธธ์ด๊ฐ 15๊ธ์, 610๊ธ์, 11๊ธ์ ์ด์ ๋ฑ์ผ๋ก ๊ตฌ๋ถ ๊ฐ๋ฅ
3. ๋ฌธ์ ํจํด ๋น๋ : ๋ฌธ์์ด์ ํน์ ํจํด์ด๋ ์๋ธ์คํธ๋ง์ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃน์ ํ์ฑํ๋ ๊ฒ EX) ์ด๋ฉ์ผ ์ฃผ์์ ๊ฒฝ์ฐ "@" ๋ฌธ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉ์ ์ด๋ฆ๊ณผ ๋๋ฉ์ธ์ ๋ถ๋ฆฌํ์ฌ ๋น๋ ๊ฐ๋ฅ
4. ๋จ์ด ๋น๋ ๋น๋ : ๋ฌธ์์ด์์ ๋จ์ด์ ์ถํ ๋น๋๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ทธ๋ฃน์ ํ์ฑํ๋ ๊ฒ.EX) ํน์ ๋น๋์ ์ถํ ๋น๋๊ฐ ๋ฎ์ ๊ฒฝ์ฐ "์ ์ ๋น๋", ์ค๊ฐ ์์ค์ ๊ฒฝ์ฐ "์ค๊ฐ ๋น๋", ๋์ ๊ฒฝ์ฐ "๋์ ๋น๋"๋ก ๋น๋ ๊ฐ๋ฅ
5. ๋ฌธ์์ด์ ์ํ ๋จ์ํฉ
์ฃผ์ด์ง ๋ฐ์ดํฐ์ ๊ฐ ๋ฌธ์์ ๋ํ ASCII ๊ฐ ๋๋ ์ ๋์ฝ๋ ์ฝ๋ ํฌ์ธํธ๋ฅผ ๋ํ ํ์ ๋ชจ๋๋ก ์ฐ์ฐ์ ํตํด ํด์ ๊ฐ์ ์์ฑํ๋ ๋ฐฉ์
EX) "hello"ASCII ๊ฐ ๋ถ์
h = 104
e = 101
l = 108
l = 108
o = 111
๐ ํฉ = 104+101+108+108+111=532
532๋ฅผ ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ํด์ ๊ฐ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
๋จ์ํฉ์ ํด์ ์ถฉ๋์ ๋ฐ์ํ ์ ์๋ ๋จ์ ์ด ์๋ค. ์๋ฅผ ๋ค์ด "hello"์ "olleh"๋ ๋ชจ๋ ๊ฐ์ ํด์๊ฐ์ ๊ฐ๊ฒ ๋๋ค.
๊ฐ๋จํ๊ณ ๋น ๋ฅด์ง๋ง, ์ถฉ๋์ด ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ด ๋์ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋๋ค.
6. ๋ฌธ์์ด์ ์ํ ๊ฐ์คํฉ
๋ฌธ์์ด์ ๊ฐ ๋ฌธ์์ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ ํ ์ด๋ฅผ ํฉ์ฐํ์ฌ ํด์ ๊ฐ์ ์์ฑํ๋ ๋ฐฉ์
์ด ๋ฐฉ๋ฒ์ ๋ฌธ์์ด์ ๊ณ ์ ๋ ๊ธธ์ด์ ํด์๊ฐ์ผ๋ก ๋งคํํ๋ ๋ฐ ์ฌ์ฉ๋๋ค.
1. ๊ฐ ๋ฌธ์์ ๋ํด ๊ฐ์ค์น๋ฅผ ํ ๋นํ๋ค. ์ด ๊ฐ์ค์น๋ ์ผ๋ฐ์ ์ผ๋ก ๋ฌธ์์ ์์น๋ ASCII ๊ฐ ๋ฑ๊ณผ ๊ด๋ จ๋ ๊ฐ์ ๊ฐ์ง ์ ์๋ค.
2. ๋ฌธ์์ด์ ์ํํ๋ฉด์ ๊ฐ ๋ฌธ์์ ํด๋นํ๋ ๊ฐ์ค์น๋ฅผ ๊ณฑํ๋ค.
3. ๊ณฑํ ๊ฐ์ ๋ชจ๋ ํฉ์ฐํ์ฌ ํด์๊ฐ์ ์์ฑํ๋ค.
4. ์์ฑ๋ ํด์ ๊ฐ์ ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ต์ข ํด์ ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ค.
EX) "hello"
1. ๊ฐ ๋ฌธ์์ ๋ํด ASCII ๊ฐ์ ๊ฐ์ค์น๋ก ์ฌ์ฉํ๋ค. ๋ฌธ์ 'h'์ ASCII ๊ฐ์ 104, e๋ 101, l์ 108, o๋ 111์ด๋ค.
2. ๊ฐ ๋ฌธ์์ ํด๋นํ๋ ASCII ๊ฐ์ ํด๋น ๋ฌธ์์ ์์น์ ๊ณฑํ ํ ์ด๋ฅผ ํฉ์ฐํ๋ค.
h์ ์์น๋ 1์ด๋ฏ๋ก, 104*1 = 104
e์ ์์น๋ 2์ด๋ฏ๋ก, 101 * 2 = 202
l์ ์์น๋ 3์ด๋ฏ๋ก, 108 * 3 = 324
l์ ์์น๋ 4์ด๋ฏ๋ก, 108 * 4 = 432
o์ ์์น๋ 5์ด๋ฏ๋ก, 111 * 5 = 555
ํฉ์ฐ๋ ๊ฐ์ ๋ชจ๋ ๋ํ๋ค. 104 + 202 + 324 + 432 + 555 = 1617
์์ฑ๋ ํฉ์ฐ ๊ฐ์ ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ๋ก ๋๋ ๋๋จธ์ง๋ฅผ ์ต์ข ํด์ ๊ฐ์ผ๋ก ์ฌ์ฉํ๋ค. ์ด ์์๋ ํด์ ํ ์ด๋ธ์ ํฌ๊ธฐ๊ฐ 100์ผ๋ก ๊ฐ์ ํ์. ๋ฐ๋ผ์ ์ต์ข ํด์๊ฐ์ 1617 % 100 = 17
๐ฉ ์ด๋ฏธ ๋ฐ์ดํฐ๊ฐ ๋ค์ด ์๋ ๊ฒฝ์ฐ, ๋ฐ์ดํฐ ์ ์ฅ ์์น๊ฐ ๊ฒน์ณ '์ถฉ๋' ๋ฐ์. ์ด ๋ ๊ฐ์ '๋์์ด'๋ผ ํ๋ค.
๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ๋, ํค ๊ฐ์ ํด์๊ฐ์ ๊ตฌํ๋ค ์) 1539(ํด์๊ฐ) % 5 = 4 (4๋ฒ ์์์ ์ ์ฅ๋์ด ์๋ค)
ํด๋น ๋ฐ์ค์ ๋ฆฌ์คํธ ํํ๋ก ๋ฐ์ดํฐ๊ฐ ๋ง๋ค๋ฉด, ์ ๋๋ฅผ ์์์ผ๋ก ์ ํ ํ์์ ํ์ฌ ๊ตฌํ๋ค.
๐ ์ถฉ๋ ์ ์ฒ๋ฆฌ ๋ฐฉ๋ฒ
1. ์ฐ์๋ฒ(์ฒด์ด๋)
๊ฐ๋ฐฉ ํด์ฑ
์ถฉ๋๋ ๋ฐ์ดํฐ๋ฅผ ํ ์ด๋ธ ๋ฐ์ ๋ณ๋์ ์ฅ์์ ์ ์ฅ/๊ด๋ฆฌ ๐ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ์ฌ์ฉ
ํด๋น ๋ฐ์ค์ ์์น์ ์๋ ๊ธฐ์กด ๋ฐ์ดํฐ์ ์ฐ๊ฒฐํ๋ค.
#include <stdio.h>
#define LENGTH 10
#define TRUE -1
int hashTable[LENGTH] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
int hashFunc(int key) {
return key % 10;
}
int main(void) {
int data, hashValue;
do {
printf("\n์ ์ฅํ ๋ฐ์ดํฐ = ");
scanf_s("%d", &data);
if (data < 0) {
break;
}
// ํด์๊ฐ ๊ตฌํ๊ธฐ
hashValue = hashFunc(data);
printf("ํด์๊ฐ = %d %% 10 = %d\n", data, hashValue); // %%๋ ํ๋ฉด์ %๋ฌธ์๋ฅผ ํ์ํ๋ค.
// ํด์ ํ
์ด๋ธ์ ์ ์ฅ
hashTable[hashValue] = data;
printf("hashTable[%d]์ %d๋ฅผ ์ ์ฅํฉ๋๋ค.\n", hashValue, data);
} while (TRUE);
do {
printf("\nํ์ํ ๋ฐ์ดํฐ = ");
scanf_s("%d", &data);
if (data < 0) {
break;
}
// ํด์๊ฐ ๊ตฌํ๊ธฐ
hashValue = hashFunc(data);
printf("ํด์๊ฐ = %d %% 10 = %d\n", data, hashValue);
// ํ์ํ ๊ฒฐ๊ณผ ํ์
if (hashTable[hashValue] == data) {
printf("hashTable[%d]๊ฐ์ %d์ด๋ฏ๋ก, ๋ฐ๊ฒฌ๋ ์์น๋ฅผ ํ์ํฉ๋๋ค.\n", hashValue, data);
printf("%d๋ฒ์งธ์์ ๋ฐ๊ฒฌ๋์์ต๋๋ค.\n", hashValue);
}
else {
printf("hashTable[%d]๊ฐ์ %d๊ฐ ์๋๋ฏ๋ก, '์ฐพ์ ์ ์์ต๋๋ค'๋ฅผ ํ์ํฉ๋๋ค.\n", hashValue, data);
printf("์ฐพ์ ์ ์์ต๋๋ค.\n");
}
} while (TRUE);
return 0;
}
2. ๊ฐ๋ฐฉ ์ฃผ์๋ฒ
ํ์ ํด์ฑ
ํด์ ํ ์ด๋ธ ๋ด์ ๋ค๋ฅธ ์ฌ๋กฏ์ ์ถฉ๋๋ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ/๊ด๋ฆฌ
์ถฉ๋์ด ๋ฐ์ํ ๊ฒฝ์ฐ, ๋ค์ ํ๋ณด๊ฐ ๋ ์ฃผ์(๋ฐฐ์ด์์ ์์น)๋ฅผ ๊ตฌํด์ ๊ฑฐ๊ธฐ์ ์ ์ฅํ๋ ๋ฐฉ์. ํด๋น ์ฃผ์์๋ ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋ค๋ฉด ๋ค์ ํ๋ณด ์ฃผ์๋ฅผ ๊ตฌํ๋ฉฐ ๋น์ด ์๋ ๊ณณ์ ์ฐพ์ ๋๊น์ง ๋ค์๋ฒ ์ฃผ์๋ฅผ ๊ตฌํ๋ค. '๋ค์ ์ฃผ์'๋ฅผ ์ด๋ป๊ฒ ๊ตฌํ๋๊ฐ๋ ํด์ ํจ์๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ '์ ํ ํ์' ๋ฑ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
์ข ๋ฅ ๐ ๋ฒํท ํด์ฑ, ์ ํ ํ์ฌ, ์ด์ฐจ ํ์ฌ, ์ด์ค ํด์ฑ
#include <stdio.h>
#define LENGTH 10
#define TRUE -1
int hashTable[LENGTH] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
int hashFunc(int key) {
return key % 10;
}
int main(void) {
int data, hashValue;
int pos; // ์ ์ฅ ์์น, ๊ฒ์ ์์น
do {
printf("\n์ ์ฅํ ๋ฐ์ดํฐ = ");
scanf_s("%d", &data);
if (data < 0) {
break;
}
// ํด์๊ฐ ๊ตฌํ๊ธฐ
hashValue = hashFunc(data);
printf("ํด์๊ฐ = %d %% 10 = %d\n", data, hashValue); // %%๋ ํ๋ฉด์ %๋ฌธ์๋ฅผ ํ์ํ๋ค.
// ๋ฐ์ดํฐ์ ์ ์ฅ ์์น๋ฅผ ์ ํจ
pos = hashValue;
printf("์ ์ฅ ์์น pos = %d\n", pos);
while (hashTable[pos] != -1) {
// ๋ค์ ๋ฐฐ์ด ์์์์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋์ง ํ์ธ
pos++;
// ๋ฐฐ์ด ๋ง์ง๋ง ์์๊น์ง ๋ฐ์ดํฐ ์ ์ฅ ๊ฐ๋ฅ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ฉด ๋ฐฐ์ด ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ง์
if (pos >= LENGTH) {
pos = 0;
}
printf("์ ์ฅ ์์น pos = %d\n", pos);
// ํด์๊ฐ์ ๋ฐฐ์ด ์์ ์์น๊น์ง ๋์์ค๋ฉด
// ํด์ ํ
์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ๊ฐ๋ ์ฐฌ ๊ฒ์ด๋ฏ๋ก ๋ฐ๋ณต์ ์ข
๋ฃ
if (pos == hashValue) {
break;
}
}
if (hashTable[pos] == -1) {
// ํด์ ํ
์ด๋ธ์ ๋ฐ์ดํฐ๊ฐ ๊ฐ๋ ์ฐจ์ง ์์๋ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
hashTable[pos] = data;
printf("hashTable[%d]์ %d๋ฅผ ์ ์ฅํฉ๋๋ค\n", pos, data);
}
else {
printf("ํด์ ํ
์ด๋ธ์ด ๊ฐ๋ ์ฐผ์ต๋๋ค.\n");
}
} while (TRUE);
do {
printf("\nํ์ํ ๋ฐ์ดํฐ = ");
scanf_s("%d", &data);
if (data < 0) {
break;
}
// ํด์๊ฐ ๊ตฌํ๊ธฐ
hashValue = hashFunc(data);
printf("ํด์๊ฐ = %d %% 10 = %d\n", data, hashValue);
// ๋ฐ์ดํฐ๋ฅผ ๊ฒ์
pos = hashValue;
printf("ํ์ ์์น pos = %d\n", pos);
while (hashTable[pos] != -1 && hashTable[pos] != data) {
// ๋ค์ ๋ฐฐ์ด ์์๋ก ํ์ ์์น๋ฅผ ์ด๋
pos++;
// ๋ฐฐ์ด ๋ง์ง๋ง ์์๊น์ง ํ์ํ๋ฉด ๋ฐฐ์ด ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ง์
if (pos >= LENGTH) {
pos = 0;
}
printf("ํ์ ์์น pos = %d\n", pos);
// -1์ ์ฐพ์๊ฑฐ๋, ํด์๊ฐ์ ์ธ๋ฑ์ค ์์น๋ก ๋์์ค๋ฉด, ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ์ ์๋ ๊ฒ์ด๋ฏ๋ก ๋ฐ๋ณต์ ์ข
๋ฃ
if (hashTable[pos] == -1 || pos == hashValue) {
break;
}
}
// ํ์ํ ๊ฒฐ๊ณผ๋ฅผ ํ์
if (hashTable[pos] == data) {
printf("hashTable[%d]๊ฐ์ %d์ด๋ฏ๋ก, ๋ฐ๊ฒฌํ ์์น๋ฅผ ํ์ํฉ๋๋ค.\n", pos, data);
printf("%d๋ฒ์งธ์์ ๋ฐ๊ฒฌ๋์์ต๋๋ค.\n", pos);
}
else {
printf("hashTable[%d]๊ฐ์ %d์ด๋ฏ๋ก, '์ฐพ์ ์ ์์ต๋๋ค.'๋ฅผ ํ์ํฉ๋๋ค.\n", pos, hashTable[pos]);
printf("์ฐพ์ ์ ์์ต๋๋ค.\n");
}
} while (TRUE);
return 0;
}
do~while ๋ฌธ์ ์ฌ์ฉํ๋ฉด ์กฐ๊ฑด์๊ณผ ์๊ด์์ด ๋ฌด์กฐ๊ฑด ์คํํ ํ ์กฐ๊ฑด์ด ๋ง๋์ง ๊ฒ์ฌํ๋ฏ๋ก ๋ฐ๋ณตํด์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ธฐ ์ข๋ค.
ํด์ ํ ์ด๋ธ์ ์ด์์ ์ธ ์๊ฐ ๋ณต์ก๋๋ O(1)์ด๋ค. ํ์ง๋ง ํด์ ์ถฉ๋์ด ์ผ์ด๋๋ฉด ํ ๋ฒ์ผ๋ก๋ ์ฐพ์ ์ ์๋ค.
๋ฐ์ดํฐ ์ ์ฅ๋ฟ ์๋๋ผ, ํ์์์๋ ํด์ ์ถฉ๋์ ํด๊ฒฐํด์ผ ํ๋ค.
๐ ๋ฒํท ํด์ฑ
์ถฉ๋์ด ๋ฐ์ํ๋ฉด ํด์ ๊ฐ์์ ์ผ์ ํ ๊ฐ๊ฒฉ์ผ๋ก ๋จ์ด์ง ์์น๋ฅผ ์ฐพ์ ํด๋น ์์น์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ค.
์ด ๋ฐฉ์์ ์ผ์ ํ ๊ฐ๊ฒฉ์ ์ ์งํ๊ธฐ ๋๋ฌธ์ ์ถฉ๋์ด ๋ฐ์ํ์ ๋, ์ฐ์๋ ์์น์ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
ํ์ง๋ง ๊ฐ๊ฒฉ์ ์ ์ ํ ์ ํํ์ง ์์ผ๋ฉด 'ํด๋ฌ์คํฐ๋ง' ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๐ ์ ํ ํ์ฌ
์ถฉ๋์ด ๋ฐ์ํ๋ฉด ํด์ ๊ฐ์์ ์ผ์ ํ ๊ฐ๊ฒฉ(๋ณดํต 1)๋งํผ ๋จ์ด์ง ์์น๋ฅผ ์ฐพ์ ํด๋น ์์น์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ค.
์ดํ์ ์ถฉ๋์ด ๋ฐ์ํ๋ฉด ๋ค์ ์์น๋ฅผ ํ์ฌํ๋ฉด ๋น ๋ฒํท์ ์ฐพ์ ๋๊น์ง ๋ฐ๋ณตํ๋ค.
์ ํ ํ์ฌ๋ ๊ฐ๋จํ๊ณ ๊ตฌํํ๊ธฐ ์ฝ์ง๋ง, ํด๋ฌ์คํฐ๋ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๐ ์ด์ฐจ ํ์ฌ
์ถฉ๋์ด ๋ฐ์ํ๋ฉด ํด์ ๊ฐ์์ ์ผ์ ํ ๊ฐ๊ฒฉ(1, 4, 9, 16 ...) ์ ์ ๊ณฑ๋งํผ ๋จ์ด์ง ์์น๋ฅผ ์ฐพ์ ํด๋น ์์น์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์ ํ๋ค.
์ ํ ํ์ฌ๋ณด๋ค๋ ์ข ๋ ๋ถ์ฐ๋ ์์น์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋ค.
ํ์ง๋ง ์ด์ฐจ ํ์ฌ ์ญ์ ํด๋ฌ์คํฐ๋ง ๋ฌธ์ ๋ฅผ ์์ ํ ํด๊ฒฐํ ์๋ ์๋ค.
๐ ์ด์ค ํด์ฑ
์ถฉ๋์ด ๋ฐ์ํ๋ฉด ํด์๊ฐ๊ณผ ๋๋ถ์ด ๋ ๋ค๋ฅธ ํด์ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์๋ก์ด ์์น๋ฅผ ๊ณ์ฐํ๋ค.
์ด์ฐจ ํ์ฌ๋ณด๋ค ๋ ๋ถ์ฐ๋ ์์น์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์์ผ๋ฉฐ, ํด๋ฌ์คํฐ๋ง ๋ฌธ์ ๋ฅผ ์ํํ ์ ์๋ค.
์ด์ค ํด์ฑ์์๋ ๋ ๋ฒ์งธ ํด์ ํจ์์ ์ ํ์ด ์ค์ํ๋ค. ์ถฉ๋์ด ๋ฐ์ํ ๋๋ง๋ค ์ ์ ํ ๋ ๋ฒ์งธ ํด์ ๊ฐ์ ์ ํํด์ผ ํ๋ค.
๐ ํด์ ํ ์ด๋ธ์ ๋ฌธ์ ์
๋ฐฐ์ด์ ํฌ๊ธฐ๊ฐ ๋๋ฌด ์์ผ๋ฉด ์ถฉ๋์ด ๋ง์์ง๊ณ , ์ ํ ํ์์ ๋น๋๊ฐ ๋์์ง๊ฒ ๋๋ค. ๋๋ฌด ๋ง์ผ๋ฉด ๋ฐ์ดํฐ๊ฐ ์๋ ๋น ์์๊ฐ ๋ง์์ ธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ญ๋นํ๊ฒ ๋๋ค. ๋ฐ๋ผ์ ๋ฐฐ์ด์ ํฌ๊ธฐ๋ฅผ ์ ์ ํ ์ค์ ํ๋ ๊ฒ์ด ์ค์ํ๋ค.
'ํด์๊ฐ์ผ๋ก๋ถํฐ ์๋ ๊ฐ์ ์ถ์ธกํ ์ ์๋ค'
์ํธ ๋ฑ์ ๋ณด์ ์ฉ๋๋ก ์ฌ์ฉ๋๋ ์กฐ๊ฑด์ผ๋ก์ ํด์ ํ ์ด๋ธ์์๋ ํ์์ ์ธ ์กฐ๊ฑด์ ์๋๋ค.
๐ฉ ์ญ์
๋ฐ์ดํฐ์ ์ญ์ ๊ฐ ์ฐจํ์ ํ์์ ๋ฐฉํดํ๋ฉด ์๋๋ค.
๐ ๋จ์ํ ๋น ์ฌ๋กฏ์ผ๋ก ๋๋ฉด ํ์์ด ํด๋น ์ฌ๋กฏ์์ ์ข ๋ฃ๋๋ฏ๋ก ๊ทธ ์ดํ์ ๋ฐ์ดํฐ๋ ๊ณ ๋ฆฝ๋๋ค.
์ญ์ ๋ก ์๊ธด ๋น ์ฌ๋กฏ์ ๋์ค์ ์ฝ์ ๊ณผ์ ์์ ์ฌ์ฉ๋์ด์ผ ํ๋ค.
๐ ๋น์
์ญ์ ๋ ๋ฐ์ดํฐ์ ์์น์ '๋น์'์ด๋ผ๋ ํน๋ณํ ํ์๋ฅผ ํ๋ค.
ํ์ : ํ์ํ๋ ๋์ ๋น์์ ๋ง๋๋ฉด ํ์์ ๊ณ์ ์งํ
์ฝ์ : ๋น์์ด ํ์๋ ์์น๋ฅผ ๋น ์์น๋ก ๊ฐ์ฃผํ์ฌ ์ ๋ฐ์ดํฐ๋ฅผ ์ฝ์
๋น์์ ๊ฐ์๊ฐ ์ฆ๊ฐํ ์๋ก ํ๊ท ํ์ ๊ฑฐ๋ฆฌ๊ฐ ์ฆ๊ฐ
'๐ฉโ๐ป ํ๋ก๊ทธ๋๋ฐ > โจ ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๊ทธ๋ํ(Graph) | ์์ ์ ๋ ฌ | ์ฐ๊ฒฐ ์ฑ๋ถ (0) | 2024.04.13 |
---|---|
ํ(Heap) cf.์ด์งํ์ํธ๋ฆฌ (0) | 2024.04.12 |
์คํ(Stack) (0) | 2024.04.12 |
ํ(Queue) (1) | 2024.04.12 |
๋ฆฌ์คํธ(List) (0) | 2024.04.11 |