2°³ÀÇ Á¤·ÄµÈ ¹è¿­À» ÇÕÃÆÀ» ¶§ÀÇ Áß°£°ª ±¸Çϱâ
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®



joinc´Â Firefox¿Í chrome¿¡¼­ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼­´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù.

¹®Á¦

2°³ÀÇ Á¤·ÄµÈ ¹è¿­ÀÌ ÀÖ´Ù. À̸¦ ÇÕÃÆÀ» ¶§, Áß°£°ªÀ» ã¾Æ¾ß ÇÑ´Ù.

¹®Á¦¿¡ Àǰß

ÀϹÝÀûÀÎ ÇÕº´Á¤·ÄÀ» ÀÌ¿ëÇÏ¸é ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸ Áß°£°ªÀ» ã´Â´Ù°í ÇÑ´Ù¸é, ¿ÏÀüÇÑ ÇÕº´Á¤·ÄÀ» ÇÒ Çʿ䰡 ¾øÀ» °ÍÀÌ´Ù. ±×·¸´Ù¸é ¾îµò°¡¿¡ ¼º´ÉÀ» °³¼±ÇÒ ¿©Áö°¡ ÀÖÀ» °ÍÀÌ´Ù.

ÀϹÝÀûÀÎ ÇÕº´Á¤·Ä

ÀüÇüÀûÀÎ ÇÕº´Á¤·ÄÀÌ´Ù. ÀÌ¹Ì ¸¸µé¾îÁø Äڵ带 Âü°íÇϱ⠹ٶõ´Ù. ÀϹÝÀûÀÌÁö¸¸ ¼º´É°³¼±Àº ±â´ëÇÒ ¼ö ¾ø´Ù.

¼º´É °³¼±

Áß°£°ªÀÌ ÇÊ¿äÇÏ´Ù¸é, ±»ÀÌ ¿ÏÀüÇÑ ÇÕº´Á¤·ÄÀÇ Çʿ䰡 ¾øÀ» °ÍÀÌ´Ù. ÀϺκп¡ ´ëÇÑ ÇÕº´Á¤·Ä¸¸À¸·Îµµ ¿øÇÏ´Â °ªÀ» ã¾Æ³¾ ¼ö ÀÖ´Ù.

     +---------------------------------------+ 
     | Array A                               | 
     +---------------------------------------+ 
        +---------+    |     +--+   
        |         |    |     |  |    Array B 
        +---------+    |     +--+ 
                       | 
                   <---| À̵¿ 
 
´ÙÀ½°ú °°Àº ¹æ¹ýÀ» ÀÌ¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
  1. Array AÀÇ Áß°£°ªÀ» ã´Â´Ù.
  2. Array A¿Í Array B¸¦ ºñ±³ÇÑ´Ù. ±×·¯¸é »õ·Î Ãß°¡µÉ ¿ø¼ÒÀÇ °¹¼ö¸¦ ÆÄ¾ÇÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
  3. Array AÀÇ Áß°£°ªÀ» ±âÁØÀ¸·Î Á ¿ì °¢°¢ ¾î´ÀÂÊ¿¡ ¸î°³ÀÇ ¿ø¼Ò°¡ Ãß°¡µÇ¾ú´ÂÁö È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
  4. ¸¸¾à Á¿¡ 5°³ ¿ì¿¡ 1°³ÀÇ ¿ø¼Ò°¡ Ãß°¡µÇ¾ú´Ù¸é, Array AÀÇ Áß°£°ªÀÇ À§Ä¡¸¦ ¿ÞÂÊÀ¸·Î 2¸¸Å­ À̵¿½ÃŰ¸é µÈ´Ù.
  5. À̶§ À̵¿Àº Array A¿Í Array B ¸ðµÎ¸¦ °í·ÁÇØ¾ß ÇϹǷΠÇÕº´Á¤·Ä¿¡¼­ÀÇ ºñ±³¿¬»êÀÌ µé¾î°¡°Ô µÉ °ÍÀÌ´Ù.

¾ÆÀ̵ð¾î ÀÚü´Â ¹®Á¦°¡ ¾øÀ» °Å¶ó »ý°¢µÈ´Ù.

¿¹¿Ü»çÇ×

ÀÌ ¿¹¿Ü »çÇ×Àº Array A¿Í Array BÀÇ ¿ø¼Ò°¡ Áߺ¹µÇÁö ¾ÊÀ» °æ¿ì¿¡ ÇØ´çµÈ´Ù.

¹è¿­°ú ¹è¿­ÀÇ ¹üÀ§°¡ °ãÄ¡Áö ¾ÊÀ» ¶§


  +----------++---------------------+ 
  | Array B  || Array A             | 
  +----------++---------------------+ 
 
  • Àüü¹è¿­ÀÇ Å©±â / 2 ¸¸Å­Çؼ­ À̵¿½ÃŰ¸é µÇ°Ú´Ù.
    • Array BÀÇ max¸¦ ±âÁØÀ¸·Î ÇÏ¸é ¾ÕµÚ·Î ¾ó¸¶¸¸Å­ À̵¿ÇØ¾ß ÇÒÁö °áÁ¤ÇÒ ¼ö ÀÖ´Ù.
      • ¿¹) Size B = 10, Size A = 20 À̶ó¸é, A¿¡¼­ 5¸¸Å­ À̵¿
    • À­ ÀýÀÇ ¼º´É°³¼±¹æ½ÄÀ» Àû¿ëÇØµµ ¹®Á¦¸¦ Ç® ¼ö ÀÖ´Ù.
      • »õ·Î Ãß°¡µÇ´Â ¿ø¼Ò°¡ 10 À̹ǷΠindex¸¦ ±âÁØÀ¸·Î ÇØ¼­ ¾ÕÀ¸·Î 5 (10/5)¸¸Å­ À̵¿½ÃŰ¸é µÈ´Ù. °á±¹ A[5]¸¦ ÀоîµéÀÌ°Ô µÉ °ÍÀÌ´Ù.

    C++/C ÄÚµå

    ¾ÆÁ÷ ¿Ï¼ºµÈ ÄÚµå´Â ¾Æ´Ï´Ù. ¾Æ¸¶ Á¦´ë·Î µ¹¾Æ°¡Áö ¾ÊÀ» °ÍÀÌÁö¸¸ ´ë·« ¹æ¹ýÀº ¾Ë ¼ö ÀÖÀ» °Í °°´Ù. ¾î¶»°Ô ±¸ÇöµÉ ¼ö ÀÖ´ÂÁö¸¸ ½Å°æ½è´Ù. ±ò²ûÇÏ°Ô ¸¸µå´Â°Ç ³»ÀÏÂë ÇØº¼ »ý°¢ÀÌ´Ù.
    #include <stdio.h> 
    #include <vector> 
     
    using namespace std; 
     
    int find_middle(int *a, int size_a, int *b, int size_b); 
    void show_array(int *a, int size_a, int *b, int size_b); 
    int lsearch(int *sp, int size_sp, int search_n); 
     
    int main(int argc, char **argv) 
    { 
            int a[] = {5, 8, 10, 14, 19, 20, 25, 30, 33, 35, 39}; 
            int b[] = {5, 8, 25}; 
     
            show_array(a, sizeof(a)/4, b, sizeof(b)/4); 
            find_middle(a, sizeof(a)/4, b, sizeof(b)/4); 
            return 0; 
    } 
     
    int find_middle(int *a, int size_a, int *b, int size_b) 
    { 
            int *largep; 
            int *smallp; 
            int smallsize; 
            int largesize; 
            int idx; 
            if (size_a > size_b) 
            { 
                    largep = a; 
                    smallp = b; 
                    idx = size_a/2; 
                    smallsize = size_b; 
                    largesize = size_a; 
            } 
            else 
            { 
                    largep = b; 
                    smallp = a; 
                    smallsize = size_a; 
                    largesize = size_b; 
                    idx = size_b/2; 
            } 
     
            // large arrayÀÇ Áß°£°ªº¸´Ù ÀÛÀº °ªÀÇ ¹üÀ§¿¡ ´ëÇØ¼­ 
            int li = 0; 
            int si = 0; 
            int left_size=0; 
            int leftsame=0; 
            int same=0; 
            printf("pivot : %d %d\n", idx, largep[idx]); 
     
            printf("Large %d , Small %d\n", largesize, smallsize); 
            while(1) 
            { 
                    if (li == largesize-1 && si == smallsize-1) break; 
     
                    printf("%d %d\n", largep[li], smallp[si]); 
                    if (largep[li] == smallp[si]) 
                    { 
                        same++; 
                        if (li < idx) leftsame++; 
                        if (li < largesize-1) 
                            li++; 
                        if (si < smallsize-1) 
                            si++; 
                    } 
                    else if(largep[li] > smallp[si]) 
                    { 
                        if (si < smallsize-1) 
                            si++; 
                        else 
                            li++; 
                    } 
                    else 
                    { 
                        if (li < largesize-1) 
                            li++; 
                    } 
                    sleep(1); 
            } 
     
            printf("Small Insert Size %d %d\n", leftsame, same); 
     
            // large arrayÀÇ Áß°£°ªº¸´Ù Å«°Íµé ºñ±³ 
            int right_size = 0; 
            same = 0; 
            int small_center = si; 
            printf("small Center : %d\n", si); 
            printf("Center %d\n", largep[li]); 
     
     
            right_size -= same; 
            printf("Large insert %d\n", right_size); 
     
            int offset = (right_size - left_size)/2; 
     
            // ´ë·« idx¸¦ ±âÁØÀ¸·Î ¾ÕÀ¸·Î 2¸¸Å­ À̵¿½ÃŲ°Ô Áß°£°ªÀÓÀ» ¾Ë ¼ö ÀÖ´Ù. 
            // ÀÌÁ¦ ½ÇÁ¦ idx¸¦ À̵¿½ÃŰ¸é¼­ ¿øÇÏ´Â °ªÀ» ã¾Æº¸ÀÚ. 
     
            printf("Offset is %d\n", offset); 
            int big_center = size_a/2; 
            int value; 
            if (offset > 0) 
            { 
                while(offset) 
                { 
                    if (largep[big_center] > smallp[small_center]) 
                    { 
                        big_center --; 
                        offset --; 
                        value = largep[big_center]; 
                    } 
                    else if (largep[big_center] < smallp[small_center]) 
                    { 
                        small_center --; 
                        offset --; 
                        value = smallp[small_center]; 
                    } 
                    else 
                    { 
                        small_center --; 
                        big_center --; 
                        value = smallp[small_center]; 
                    } 
                } 
                printf("[1] middle Value : %d \n", value); 
            } 
            else 
            { 
                value = largep[big_center]; 
                while(offset) 
                { 
                    if (largep[big_center] < smallp[small_center]) 
                    { 
                        big_center ++; 
                        offset ++; 
                        value = largep[big_center]; 
                    } 
                    else if (largep[big_center] > smallp[small_center]) 
                    { 
                        small_center ++; 
                        offset ++; 
                        value = smallp[small_center]; 
                    } 
                    else 
                    { 
                        small_center ++; 
                        big_center ++; 
                        value = smallp[small_center]; 
                    } 
                } 
                printf("[2] middle Value : %d\n", value); 
            } 
     
            return 0; 
    } 
     
    // °æ¿ì¿¡ µû¶ó¼­ binary °Ë»öÀ¸·Î ÇÒ ¼ö ÀÖ´Ù. 
    int lsearch(int *sp, int size_sp, int search_n) 
    { 
            int i = 0; 
            while(i < size_sp) 
            { 
                    if ( *(sp+i) > search_n) 
                            return i; 
                    i++; 
            } 
            return 0; 
    } 
     
    void show_array(int *a, int size_a, int *b, int size_b) 
    { 
        int i = 0; 
        printf("[ "); 
        for(i = 0; i < size_a; i++) 
        { 
            printf("%d ",a[i]); 
        } 
        printf("]\n"); 
     
        printf("[ "); 
        for(i = 0; i < size_b; i++) 
        { 
            printf("%d ",b[i]); 
        } 
        printf("]\n"); 
    } 
     

    ÇØ¾ßÇÒÀÏ

    1. À§ÀÇ °³¼±»çÇ×À» ÄÚµåÈ­ÇØ¼­ Å×½ºÆ®Çغ»´Ù.
    2. Àß µ¹¾Æ°¡´Â °¡ ?
    3. Àß µ¹¾Æ°¡Áö ¾Ê´Â´Ù¸é, ¹®Á¦Á¡À» ã¾Æº»´Ù. ȤÀº ¹æ½ÄÀÚü°¡ À߸øµÇ¾úÀ» ¼öµµ ÀÖ´Ù.
    4. Àß µ¹¾Æ°£´Ù¸é, ¿Ö Àß µ¹¾Æ°¡´ÂÁö (Á÷°üÀÌ ¾Æ´Ñ)Áõ¸íÇÒ ¼ö Àִ°¡ ?
    5. ±×·¸´Ù¸é À§Ä¡¸¦ ÀÎÀÚ·Î ¹Þ¾Æ¼­, ÇØ´ç À§Ä¡ÀÇ °ªÀ» ¾ò¾î¿Ã ¼ö ÀÖµµ·Ï Äڵ带 ¼öÁ¤ÇÒ ¼ö ÀÖÀ»±î ?
      1. Á¤·ÄµÈ ¹è¿­ÀÇ 70% ÁöÁ¡¿¡ ÀÖ´Â °ª
      2. Á¤¿­µÈ ¹è¿­ÀÇ 60% ¿¡¼­ 70% ÁöÁ¡¿¡ ÀÖ´Â °ª
  • EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.