[c++] ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๊ฐœ๋…๊ณต๋ถ€ :: ํƒ์ƒ‰ (์„ ํ˜• ํƒ์ƒ‰, ์ด์ง„ ํƒ์ƒ‰, ํ•ด์‹œ ํƒ์ƒ‰)

ํƒ์ƒ‰

 ํƒ์ƒ‰์€ ์ฃผ์–ด์ง„ ์ž๋ฃŒ๋“ค ์ค‘ ์›ํ•˜๋Š” ์กฐ๊ฑด์— ํ•ด๋‹นํ•˜๋Š” ์ž๋ฃŒ๋ฅผ ์ฐพ๋Š” ๊ณผ์ •์ด๋‹ค. ์ปดํ“จํ„ฐ์—์„œ ํƒ์ƒ‰์€ ์ž์ฃผ ์ด๋ฃจ์–ด์ง€๋ฏ€๋กœ ํšจ์œจ์ ์ธ ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

 ์ด์ „์— ๋ฐฐ์› ๋˜ '์ •๋ ฌ'์€ ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ •๋ ฌ์€ ๋ฆฌ์ŠคํŠธ๋ฅผ ํ•˜๋‚˜์˜ ๊ธฐ์ค€์œผ๋กœ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด์„œ๋„ ์“ฐ์ด์ง€๋งŒ ์›ํ•˜๋Š” ์ž๋ฃŒ๋ฅผ ๋น ๋ฅด๊ฒŒ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•ด ์“ฐ์ด๊ธฐ๋„ ํ•œ๋‹ค. ๋ฌผ๋ก  ๊ตณ์ด ์ •๋ ฌ์ด ์•„๋‹ˆ๋”๋ผ๋„ ํƒ์ƒ‰์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ ์žˆ๋‹ค.

 

์ •๋ ฌ ๋ณด๊ธฐ

 

์•ž์œผ๋กœ ์†Œ๊ฐœํ•  ํƒ์ƒ‰์€ ๋‹ค์Œ์˜ 4๊ฐ€์ง€ ์ข…๋ฅ˜์ด๋‹ค.

  1. ์„ ํ˜•ํƒ์ƒ‰

  2. ์ด์ง„ํƒ์ƒ‰

  3. ํ•ด์‹œํƒ์ƒ‰

  4. BST

    ํƒ์ƒ‰์„ ์œ„ํ•ด์„œ๋Š” ๋ฐฐ์—ด, ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ, ํŠธ๋ฆฌ, ๊ทธ๋ž˜ํ”„ ๋“ฑ ๋‹ค์–‘ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉฐ, ์ƒํ™ฉ์— ๋”ฐ๋ผ ๋งž์ถฐ์„œ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

์ž๋ฃŒ๊ตฌ์กฐ ๋ณด๊ธฐ

 

์„ ํ˜• ํƒ์ƒ‰

 ์ˆœ์ฐจ ํƒ์ƒ‰์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š” ์„ ํ˜• ํƒ์ƒ‰์€ ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํƒ์ƒ‰ ๋ฐฉ๋ฒ•์ด๋‹ค. ์„ ํ˜• ํƒ์ƒ‰์—์„œ๋Š” ์ •๋ ฌ๋˜์ง€ ์•Š์€ ์ดˆ๊ธฐ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋๊นŒ์ง€ ์ฐจ๋ก€๋กœ ๊ฒ€์‚ฌํ•œ๋‹ค.

 

 ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š” ์š”์†Œ์˜ ๊ฐฏ์ˆ˜๋ฅผ n์ด๋ผ๊ณ  ํ•  ๋•Œ, ์ˆœ์ฐจํƒ์ƒ‰์€ ๋ฐœ๊ฒฌํ•˜๋Š” ์ˆœ๊ฐ„ ํƒ์ƒ‰์„ ๋งˆ์นœ๋‹ค. ๋ฆฌ์ŠคํŠธ์— ์›ํ•˜๋Š” ์š”์†Œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋Š” ํ‰๊ท ์ ์œผ๋กœ (n+1)/2์˜ ๋น„๊ต๋กœ ์š”์†Œ๋ฅผ ์ฐพ์•„๋‚ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฆฌ์ŠคํŠธ์— ์›ํ•˜๋Š” ์š”์†Œ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ์—๋Š” ์ด n+1 ๋ฒˆ์˜ ๋น„๊ต ๋์— ํ•ด๋‹น ์š”์†Œ๊ฐ€ ์—†๋‹ค๋Š” ์ ์„ ๋ฐœ๊ฒฌํ•˜๊ฒŒ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ˆœ์ฐจํƒ์ƒ‰์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(n)์ด๋‹ค.

 

๊ตฌํ˜„

์˜์‚ฌ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

//value : ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’
//index : ์ฐพ์€ ๊ฐ’์˜ ์œ„์น˜

for i=0 to n:
    if arr[i] == value
        index = i
        break

 

c++๋กœ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

int arr[9] = { 3,1,5,7,2,4,9,6,8 };
int arr_size = sizeof(arr) / sizeof(int);

int linearSearch(int target) {
    // ์ฐพ์€ ๊ฐ’์˜ index ๋ฐ˜ํ™˜, ์—†์œผ๋ฉด -1 ๋ฐ˜ํ™˜
    int result = -1;

    for (int i = 0; i < arr_size; i++) {
        if (arr[i] == target) {
            result = i;
            break;
        }
    }
    return result;
}

 

์ด์ง„ ํƒ์ƒ‰

 ์ด๋ถ„ ํƒ์ƒ‰์ด๋ผ๊ณ ๋„ ๋ถˆ๋ฆฌ๋Š” ์ด์ง„ ํƒ์ƒ‰์€ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ์— ์ ์šฉํ•˜๊ธฐ ์ข‹์€ ํƒ์ƒ‰ ๋ฐฉ๋ฒ•์ด๋‹ค. ์•ž์„œ ์„ค๋ช…ํ–ˆ๋“ฏ์ด ํƒ์ƒ‰์„ ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ์ •๋ ฌ๋„ ์†ํ•ด์žˆ๋‹ค๊ณ  ํ–ˆ๋Š”๋ฐ, ์ •๋ ฌ ํ›„ ์ด์ง„ ํƒ์ƒ‰์„ ์ด์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์—ฌ๋Ÿฌ ๋ฒˆ ๋‚ฎ์€ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ์š”์†Œ๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฌผ๋ก  ์ •๋ ฌ์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊นŒ์ง€ ์ƒ๊ฐํ•œ๋‹ค๋ฉด ๋‹จ์ˆœํ•œ ์„ ํ˜• ํƒ์ƒ‰์ด ๋” ๋‚ซ๋‹ค๊ณ  ์ƒ๊ฐํ• ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ •๋ ฌ์€ ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•ด ํ•œ๋ฒˆ๋งŒ ์ˆ˜ํ–‰๋˜์–ด๋„ ๋˜๋ฏ€๋กœ ๋ฐ˜๋ณต์ ์ธ ํƒ์ƒ‰์„ ์ƒ๊ฐํ•œ๋‹ค๋ฉด ์ •๋ ฌ ํ›„ ์ด์ง„ ํƒ์ƒ‰ ๋ฐฉ๋ฒ•์ด ๋” ์ข‹์„ ์ˆ˜๋„ ์žˆ๋‹ค.

 

 ์ด์ง„ ํƒ์ƒ‰์€ ์šฐ์„  ์ฃผ์–ด์ง„ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ •๋ ฌํ•˜๋Š” ๊ฒƒ์—์„œ ์‹œ์ž‘ํ•œ๋‹ค. ์ดํ›„ ์ •๋ ฌ๋œ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐ€์šด๋ฐ์— ์žˆ๋Š” ์š”์†Œ์™€ ์ฐพ๊ณ ์žํ•˜๋Š” ๊ฐ’์„ ๋น„๊ตํ•œ๋‹ค. ๋Œ€์†Œ๊ด€๊ณ„์— ๋”ฐ๋ผ ํ•ด๋‹น ์š”์†Œ๊ฐ€ ๋งž๋Š”์ง€, ์•„๋‹ˆ๋ฉด ์™ผ์ชฝ ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š”์ง€ ์˜ค๋ฅธ์ชฝ ๋ฆฌ์ŠคํŠธ์— ์žˆ๋Š”์ง€๋ฅผ ํŒ๋‹จํ•œ๋‹ค. ์ฐพ๊ณ ์žํ•˜๋Š” ๊ฐ’๋ณด๋‹ค ๊ฐ€์šด๋ฐ์— ์žˆ๋Š” ์š”์†Œ๊ฐ€ ๋” ์ž‘์•„์„œ ๋” ํฐ ๋ฒ”์œ„์—์„œ ์ฐพ์•„์•ผํ•œ๋‹ค๋ฉด ํ•ด๋‹น ์š”์†Œ ์˜ค๋ฅธ์ชฝ์— ์ •๋ ฌ๋˜์–ด์žˆ๋Š” ๋ฆฌ์ŠคํŠธ๋ฅผ ๊ฐ€์ ธ์™€ ์œ„์™€๊ฐ™์€ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•œ๋‹ค.

 

 ๋ฆฌ์ŠคํŠธ์— ์›ํ•˜๋Š” ์š”์†Œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋ฅผ ์ตœ์•…์œผ๋กœ ์ƒ๊ฐํ•ด๋ณด๋ฉด, ๋ฆฌ์ŠคํŠธ์˜ ์š”์†Œ๋ฅผ 1/2์”ฉ ์ค„์—ฌ๊ฐ€๋ฏ€๋กœ ์ตœ์•…์˜ ๊ฒฝ์šฐ lgn๋ฒˆ์˜ ๋น„๊ต๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋”ฐ๋ผ์„œ ์ด์ง„ ํƒ์ƒ‰์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(lgn)์ด๋‹ค.

 

๊ตฌํ˜„

์˜์‚ฌ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

//value : ์ฐพ๊ณ ์ž ํ•˜๋Š” ๊ฐ’
//index : ์ฐพ์€ ๊ฐ’์˜ ์œ„์น˜

function binarySearch (start, end):
    if start == end 
        if value == arr[start]
            index = start
        else
            return


    mid := start + end / 2 
    if mid == value
        index = mid
        break
    else if mid > value
        binarySearch(start, mid)
    else if mid < value
        binarySearch(mid+1, end)
end

 

c++๋กœ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

// ํ˜ธ์ถœ ์˜ˆ์‹œ
quickSort(arr, 0, arr_size);
cout << "์ด์ง„ ํƒ์ƒ‰ ๊ฒฐ๊ณผ : " << binarySearch(0, arr_size, 2) << endl;

// ๊ตฌํ˜„ ์ฝ”๋“œ
int binarySearch(int start, int end, int target){
    if (end-start<=1) {
        if (target == arr[start])
            return start;
        return -1;
    }
    int result = -1;
    int mid = (int)((start + end) / 2);
    if (arr[mid] == target)
        result = mid;
    else if (arr[mid] > target)
        result = binarySearch(start, mid, target);
    else if (arr[mid] < target)
        result = binarySearch(mid + 1, end, target);

    return result;
}

 

๋ณด๊ฐ„ ํƒ์ƒ‰

์ด์ง„ ํƒ์ƒ‰์€ ๋ฆฌ์ŠคํŠธ์—์„œ ์ค‘๊ฐ„์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ๊ธฐ์ ์œผ๋กœ ํŒ๋‹จํ•œ๋‹ค๋ฉด, ๋ณด๊ฐ„ ํƒ์ƒ‰์€ ์š”์†Œ๊ฐ€ ์žˆ์„ ๋งŒํ•œ ์ธ๋ฑ์Šค๋ฅผ ์˜ˆ์ธกํ•ด์„œ ํ•ด๋‹น ์ธ๋ฑ์Šค์— ์žˆ๋Š” ์š”์†Œ๋ฅผ ๊ธฐ์ ์œผ๋กœ ํŒ๋‹จํ•˜๋Š” ํƒ์ƒ‰ ๋ฐฉ๋ฒ•์ด๋‹ค. ์ฆ‰, ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ถˆ๊ท ๋“ฑ ๋ถ„ํ• ํ•˜์—ฌ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค. ์ด๋ฏธ ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ํ•˜๋Š” ํƒ์ƒ‰์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณด๊ฐ„ ํƒ์ƒ‰์ด ๋” ํšจ์œจ์ ์ผ ์ˆ˜๋„ ์žˆ๋‹ค.

 

์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ (BST)

์ž๋ฃŒ๊ตฌ์กฐ - ํŠธ๋ฆฌ

 

 BST(Binary Search Tree)๋Š” ํŠธ๋ฆฌ์˜ ํ•œ ์ข…๋ฅ˜์ด์ž ์ด์ง„ํƒ์ƒ‰์„ ์œ„ํ•œ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์œ„์—์„œ๋Š” ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด์ง„ํƒ์ƒ‰์„ ๊ตฌํ˜„ํ•˜์˜€์ง€๋งŒ, ์ด๋ฒˆ์—๋Š” ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•œ ํŠธ๋ฆฌ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์ž. ๋ฆฌ์ŠคํŠธ์™€ ํŠธ๋ฆฌ ๋ชจ๋‘ ๋ฐฐ์—ด ๋˜๋Š” ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ๊ฐ๊ฐ์— ํšจ์œจ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๊ณ  ํŠธ๋ฆฌ๋Š” ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜์ž.

 ์ด์ง„ ํƒ์ƒ‰์€ ๋ฆฌ์ŠคํŠธ(๋ฐฐ์—ด)๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž๋ฃŒ์˜ ์‚ฝ์ž… / ์‚ญ์ œ๊ฐ€ ๋งค์šฐ ๋น„ํšจ์œจ์ ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ํŠธ๋ฆฌ(์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ)๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์‚ฝ์ž… / ์‚ญ์ œ๊ฐ€ ํšจ์œจ์ ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฝ์ž… / ์‚ญ์ œ๊ฐ€ ๋นˆ๋ฒˆํžˆ ์ด๋ฃจ์–ด์ง„๋‹ค๋ฉด ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๊ฐ€ ์œ ๋ฆฌํ•˜๋‹ค. ์ด์ง„ ํƒ์ƒ‰ ํŠธ๋ฆฌ๋Š” ์ฆ‰ ์ด์ง„ ํƒ์ƒ‰์ด๋ผ๋Š” ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์— ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ๋ผ๋Š” ์‚ฝ์ž… / ์‚ญ์ œ์— ํšจ์œจ์ ์ธ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋”ํ•œ ํ˜•ํƒœ์ด๋‹ค. ์•„๋ž˜์˜ ํฌ์ŠคํŒ…์œผ๋กœ ๋” ์ž์„ธํžˆ ์ดํ•ดํ•ด๋ณด์ž.

BST

ํ•ด์‹œ ํƒ์ƒ‰

(ํ•ด์‹œ ๋งํฌ)

ํ•ด์‹œ ํƒ์ƒ‰์€ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์ด์šฉํ•œ ํƒ์ƒ‰ ๋ฐฉ๋ฒ•์ด๋‹ค. ํ•ด์‹œ ํ•จ์ˆ˜๋ž€ ์›๋ž˜ '์ž„์˜์˜ ๊ธธ์ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณ ์ •๋œ ๊ธธ์ด์˜ ๋ฐ์ดํ„ฐ๋กœ ๋งคํ•‘ํ•˜๋Š” ํ•จ์ˆ˜'๋ฅผ ์ผ์ปซ๋Š”๋ฐ, ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด ๋‹ค์–‘ํ•œ ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋ถ„๋ฅ˜ํ•˜๋Š” ํ•จ์ˆ˜์ด๋‹ค.

 

 ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ๊ฑฐ์นœ ํ›„ ๋‚˜์˜ค๋Š” ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ ์ž…๋ ฅ๋“ค์„ ๋ถ„๋ฅ˜ํ•˜๋Š” ๊ณผ์ •์€ ๋ฏธ๋ฆฌ ์ค€๋น„ํ•ด๋‘” ์ƒ์ž(ํ•ด์‹œ ํ…Œ์ด๋ธ”)์— ์ž…๋ ฅ๋“ค์„ ๋ถ„๋ฅ˜ํ•ด์„œ ๋‹ด์•„๋‘”๋‹ค๊ณ  ์ดํ•ดํ•˜๋ฉด ๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ๋ฏธ๋ฆฌ ์ƒ์ž์— ๋‹ด์•„๋‘๋ฉด ๋‚˜์ค‘์— ํ•ด๋‹น ์š”์†Œ๋ฅผ ์ฐพ๊ณ ์ž ํ•  ๋•Œ ๋น ๋ฅด๊ฒŒ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

ํ•ด์‹œ ํƒ์ƒ‰์€ ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์ž…๋ ฅ๋“ค์„ ๋ถ„๋ฅ˜/์ €์žฅํ•˜๋Š” ์ž‘์—…์ด ๋จผ์ € ํ•„์š”ํ•˜๊ณ , ๊ทธ ํ›„ ์š”์†Œ๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ๋Š” ์ฐพ๊ณ ์žํ•˜๋Š” ์š”์†Œ์˜ ํ•ด์‹œ๊ฐ’์„ ์ด์šฉํ•ด ๋น ๋ฅด๊ฒŒ ์š”์†Œ๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 ๋ถ„๋ฅ˜ ์ €์žฅํ•˜๋Š” ์ž‘์—…์—์„œ ์ฃผ์˜ํ•  ์ ์€ ํ•ด์‹œ ํ•จ์ˆ˜์— ์˜ํ•œ ํ•ด์‹œ ๊ฐ’์ด ๊ฒน์น  ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์ด๋ฅผ ํ•ด์‹œ๊ฐ’ ์ถฉ๋Œ์ด๋ผ๊ณ  ํ•˜๊ณ , ํ•ด์‹œ ํ•จ์ˆ˜๋Š” ํ•ด์‹œ๊ฐ’ ์ถฉ๋Œ์ด ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ผ์–ด๋‚  ์ˆ˜๋ก ์งˆ์ด ์•ˆ ์ข‹๋‹ค๊ณ  ํŒ๋‹จ๋œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ž…๋ ฅ์˜ ํฌ๊ธฐ์— 2๋ฐฐ๋กœ ํ•ด์‹œ ๊ฐ’ ๋ฐฐ์—ด์„ ์ค€๋น„ํ•˜์ง€๋งŒ, ๋‹ค๋ฅธ ์ž…๋ ฅ์— ๋Œ€ํ•ด์„œ ํ•ด์‹œ ๊ฐ’์ด ๊ฒน์น˜๋Š” ๊ฒฝ์šฐ์—๋Š” ๋ฐฐ์—ด์˜ ๋‹ค์Œ ์ธ๋ฑ์Šค๋“ค์„ ํ›‘์œผ๋ฉด์„œ ๋น„์–ด์žˆ๋Š” ์ธ๋ฑ์Šค์— ์ €์žฅํ•ด์•ผํ•œ๋‹ค.

ํ•ด์‹œ ๊ฐ’์ด ๊ฒน์น˜๋Š” ๊ฒฝ์šฐ์— ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค์–‘ํ•œ๋‹ค. ๊ฐ™์€ ํ•ด์‹œ ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ์š”์†Œ๋“ค์„ ์—ฐ๊ฒฐ ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ค์–ด๋‘๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค. ์ด ๊ธ€์—์„œ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด์„œ ๋น„์–ด์žˆ๋Š” ์ธ๋ฑ์Šค์— ์ €์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.

ํ•ด์‹œ ์ถฉ๋Œ ๋ฐœ์ƒ์‹œ ์กฐ์‚ฌํ•˜๊ฒŒ ๋˜๋Š” ๋Œ€์ฒด ์นธ์„ ๋ฒˆ์ง€ ๊ณ„์—ด์ด๋ผ๊ณ  ํ•œ๋‹ค.

๋ฒˆ์ง€ ๊ณ„์—ด์ด ๊ฒน์ณ์„œ ์ถฉ๋Œ์ด ์ผ์–ด๋‚˜๋Š” ๊ฒฝ์šฐ๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ ๋ผ๊ณ  ํ•œ๋‹ค.

 ๊ทธ ํ›„ ์š”์†Œ๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ๋„ ์ฒ˜์Œ์—๋Š” ํ•ด์‹œ๊ฐ’์„ ์ด์šฉํ•ด์„œ ๋น ๋ฅด๊ฒŒ ์š”์†Œ๋ฅผ ํƒ์ƒ‰ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ, ํ•ด์‹œ๊ฐ’ ์ถฉ๋Œ๋กœ ์ธํ•ด ๋‹ค๋ฅธ ์ธ๋ฑ์Šค์— ์ €์žฅ๋˜์–ด์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์›ํ•˜๋Š” ๊ฐ’๊ณผ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ๊ฒฐ๊ตญ ์ฐพ๋˜ ์ธ๋ฑ์Šค๋กœ๋ถ€ํ„ฐ ์ˆœ์ฐจ ํƒ์ƒ‰ ํ•ด๋ณด์•„์•ผํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด์‹œ ํƒ์ƒ‰์€ ํ•ด์‹œ ํ•จ์ˆ˜์˜ ์งˆ์ด ์ข‹์„ ๋•Œ๋งŒ ํšจ์œจ์ ์œผ๋กœ ์ž‘๋™ํ•œ๋‹ค.

 

๊ตฌํ˜„

#include <iostream>
#include <string>

using namespace std;

int hashFunction(int data) {
    // ํ•ด์‹œ ํ•จ์ˆ˜
	return data % 10;
}

void classifyData(int data, int* table) {
    // ๋ฐ์ดํ„ฐ ๋ถ„๋ฅ˜ ๋ฐ ์ €์žฅ
	int hashValue = hashFunction(data);
	int flag = 0;
	while (hashValue<20) {
		if (table[hashValue] == -1) { // ํ•ด๋‹น ์นธ์— ์š”์†Œ๊ฐ€ ์—†์œผ๋ฉด
			table[hashValue] = data;
			flag = 1;
			break;
		}
		hashValue++; // ๋‹ค์Œ ์นธ์œผ๋กœ ์ด๋™
	}
	if(!flag)
		cout << "์ €์žฅ ์‹คํŒจ, ๊ณต๊ฐ„ ๋ถ€์กฑ" << endl;
}

bool searchData(int data, int* table) {
    // ๋ฐ์ดํ„ฐ ํƒ์ƒ‰
	int hashValue = hashFunction(data);
	while (hashValue<20) {
		if (table[hashValue] == data) { // ๋ฐœ๊ฒฌํ–ˆ์œผ๋ฉด
			return true;
		}
		hashValue++;
	}
	return false;
}

void printHashTable(int* table) {
	for (int i = 0; i < 20; i++) {
		cout << table[i] << " ";
	}
	cout << endl;
}

int main() {
    // ์ฃผ์–ด์ง„ input์„ hashTable๋กœ ๋ถ„๋ฅ˜ํ•˜๊ณ  ํƒ์ƒ‰ํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ
    
	int input[10] = { 41,24,35,26,12,33,44,5,2,1 };
	int hashTable[20];
	memset(hashTable, -1, sizeof(hashTable));
	
	for (int i = 0; i < 10; i++) {
		classifyData(input[i], hashTable);
	}
	printHashTable(hashTable);

	string result = searchData(33, hashTable) ? "์žˆ์Œ" : "์—†์Œ";
	cout << "33 ํƒ์ƒ‰ : " + result << endl;

	int a; cin >> a;
}

 

ํŠน์ง•

 ํ•ด์‹œ ํƒ์ƒ‰์—์„œ๋Š” ์›ํ•˜๋Š” ์š”์†Œ๋ฅผ ํƒ์ƒ‰ํ•  ๋•Œ ์ƒ์ˆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋กœ ์—ฐ์‚ฐ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ํ•˜์ง€๋งŒ ์œ„์—์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ํ•ด์‹œ ํ•จ์ˆ˜์˜ ์งˆ์ด ์ข‹์ง€ ์•Š๋‹ค๋ฉด, ๋” ๋ณต์žกํ•ด์งˆ ์ˆ˜๋„ ์žˆ๋‹ค.

๋˜ํ•œ ๊ธฐ์กด ์ž…๋ ฅ์˜ 2๋ฐฐ ์ด์ƒ์˜ ๋ฐฐ์—ด์ด ํ•„์š”ํ•˜๋ฏ€๋กœ ๊ณต๊ฐ„ ๋ณต์žก๋„ ์ธก๋ฉด์—์„œ๋Š” ์ข‹์ง€ ์•Š์€ ์„ ํƒ์ด๋‹ค.


์ฐธ๊ณ  : https://pwnwiz.tistory.com/9

๋ฐ˜์‘ํ˜•