20-1-³ª.À̺Р°Ë»ö

À̺Р°Ë»öÀº ±¸°£ÀÇ Áß°£°ª°ú ۰ªÀÇ ´ë¼Ò¸¦ ±¸ºÐÇÏ¿© Å×À̺íÀ» Àý¹Ý¾¿ ³ª´² °¡¸ç ºñ±³ÇÏ´Â ¹æ¹ýÀÌ´Ù. ¼øÂ÷ °Ë»öÀÌ »óµî ºñ±³¸¸ ÇÏ°í ¼ø¼­´ë·Î °Ë»öÇϴµ¥ ºñÇØ À̺Р°Ë»öÀº ´ë¼Ò ºñ±³¸¦ ÅëÇØ ±¸°£À» ³ª´² ºñ±³ÇÏ´Â Á» ´õ Áö´ÉÀûÀÎ ¹æ¹ýÀ̶ó°í ÇÒ ¼ö ÀÖ´Ù. ÇÑ ¹ø ºñ±³ÇÒ ¶§¸¶´Ù Å×À̺íÀÇ ±æÀ̰¡ Àý¹Ý¾¿ ÁÙ¾î µé±â ¶§¹®¿¡ °Ë»ö È¿À²Àº ¾ÆÁÖ ÁÁÀ¸¸ç Å×À̺íÀÌ À¢¸¸Å­ Ä¿µµ ´À·ÁÁöÁö ¾Ê´Â´Ù.

¿µÇÑ »çÀü¿¡¼­ girlÀ̶ó´Â ´Ü¾î¸¦ ã´Â´Ù°í ÇØ º¸ÀÚ. ¼øÂ÷ °Ë»öÀº »çÀüÀÇ Ã³À½ºÎÅÍ a, ab, aba, abc, ace µîµîÀÇ ´Ü¾î¸¦ ºñ±³Çϸ鼭 girlÀÌ ³ª¿Ã ¶§±îÁö ã´Â ºñÈ¿À²ÀûÀÎ ¹æ¹ýÀÌ´Ù. À̺Р°Ë»öÀº »çÀüÀÇ Áß°£ ºÎºÐÀ» ÆîÃÄ girlº¸´Ù ´õ Å©¸é ¾ÕÂÊÀ¸·Î, ÀÛÀ¸¸é µÚÂÊÀ¸·Î °¡¸é¼­ Á¡Á¡ ¹üÀ§¸¦ Á¼Çô °¡¸ç °Ë»öÇÏ´Â ¹æ¹ýÀÌ´Ù. ÀϹÝÀûÀ¸·Î »çÀüÀ» °Ë»öÇÒ ¶§ ¿ì¸®´Â À̺Р°Ë»ö ¹æ¹ýÀ» »ç¿ëÇÏ¸ç ±×·¡¼­ »çÀüÀÌ ¾Æ¹«¸® Ä¿µµ ´Ü¾î¸¦ ã´Â ¼Óµµ°¡ ºü¸£´Ù.

À̺Р°Ë»öÀÌ °¡´ÉÇÏ·Á¸é Å×À̺íÀÇ ¸ðµç ÀÚ·á°¡ ¿À¸§Â÷¼øÀ¸·Î ¿µÇÑ »çÀüó·³ Á¤·ÄµÇ¾î ÀÖ¾î¾ß ÇÑ´Ù´Â Á¦¾àÀÌ ÀÖ´Ù. ±×·¡¼­ ÀڷḦ »ðÀÔÇÒ ¶§ Ç×»ó ´ÙÀ½ °Ë»öÀ» À§ÇØ Á¦ À§Ä¡¿¡ »ðÀÔÇØ¾ß ÇÏ´Â °ü¸®»óÀÇ ¾î·Á¿òÀÌ ÀÖÁö¸¸ ±× ´ë°¡·Î ºü¸¥ °Ë»ö ¼Óµµ¸¦ º¸Àå ¹ÞÀ» ¼ö ÀÖ´Ù. ´ÙÀ½ ¿¹Á¦´Â ¿À¸§Â÷¼øÀ¸·Î Á¤·ÄµÇ¾î ÀÖ´Â Á¤¼ö ¹è¿­¿¡¼­ Áß°£ÂëÀÇ Å°°ªÀ» À̺Р°Ë»öÀ¸·Î ã´Â´Ù.

 

¿¹ Á¦ : BinarySearch

#include <Turboc.h>

 

int BinarySearch(int *ar,unsigned num,int key)

{

     unsigned Upper,Lower,Mid;

 

     Lower=0;

     Upper=num-1;

     for (;;) {

          Mid=(Upper+Lower)/2;

 

          if (ar[Mid]==key) return Mid;

          if (ar[Mid]>key) {

              Upper=Mid-1;

          } else {

              Lower=Mid+1;

          }

          if (Upper<=Lower) {

              return -1;

          }

     }

}

 

void main()

{

     int ar[]={2,6,13,19,21,21,23,29,35,48,62,89,90,95,99,102,109,208,629};

     unsigned num;

     int key,idx;

 

     num=sizeof(ar)/sizeof(ar[0]);

     key=29;

     idx=BinarySearch(ar,num,key);

     if (idx == -1) {

          puts("ã´Â °ªÀÌ ¾ø½À´Ï´Ù.");

     } else {

          printf("ã´Â °ªÀº %d¹øÂ°¿¡ ÀÖ½À´Ï´Ù.\n",idx);

     }

}

 

ar ¹è¿­ÀÌ °Ë»ö ´ë»ó Å×À̺íÀ̸ç 19°³ÀÇ Á¤¼öµéÀÌ Å©±â¼øÀ¸·Î Àß ³ª¿­µÇ¾î ÀÖ´Ù. BinarySearch ÇÔ¼ö´Â ÀÌ ¹è¿­¿¡¼­ key¸¦ ã´Âµ¥ ¿¹Á¦ÀÇ °æ¿ì 29¶ó´Â ¼ö°¡ Ű °ªÀ¸·Î ÁÖ¾îÁ³´Ù. ÀÌ ÇÔ¼ö°¡ ar¿¡¼­ 29¸¦ ã´Â °úÁ¤Àº ´ÙÀ½°ú °°´Ù.

ÃÖÃÊ Lower°¡ ¹è¿­ÀÇ Ã³À½, Upper°¡ ¹è¿­ÀÇ ³¡À» °¡¸®Å°°í Mid´Â ÀÌ µÑÀÇ Áß°£ÀÎ ar[9]¸¦ °¡¸®Å°°í ÀÖ´Ù. ÀÌ »óÅ¿¡¼­ ar[9]ÀÇ °ª 48°ú ã°í Àִ Ű°ª 29¸¦ ºñ±³ÇØ º¸´Ï 48ÀÌ ÈξÀ ´õ Å©´Ù. ±×·¯¹Ç·Î ã´Â °ªÀÌ 48º¸´Ù ´õ ¾Æ·¡ÂÊ¿¡ ÀÖÀ»¸®°¡ ¸¸¹«Çϸç Upper°¡ 48ÀÇ ¹Ù·Î À§ÀÎ ar[8]·Î À̵¿ÇÔÀ¸·Î½á °Ë»ö ¹üÀ§°¡ Àý¹ÝÀ¸·Î ÁÙ¾îµç´Ù. ۰ªÀÌ ar[9]º¸´Ù ´õ ÀÛÀ¸¹Ç·Î ar[9]µµ °Ë»ö ´ë»ó¿¡¼­ Á¦¿ÜµÊÀ» À¯ÀÇÇϵµ·Ï ÇÏÀÚ. Upper°¡ Mid·Î °¡´Â °ÍÀÌ ¾Æ´Ï¶ó Mid-1·Î °¡´Âµ¥ ÀÌ·¸°Ô ÇÏÁö ¾ÊÀ¸¸é °Ë»ö ¹üÀ§¸¦ »¡¸® Á¼Èú ¼ö ¾øÀ½Àº ¹°·ÐÀ̰í Ű¿Í ÀÏÄ¡ÇÏ´Â °ªÀÌ ¾øÀ» ¶§ ¹«ÇÑ ·çÇÁ¿¡ ºüÁú ¼öµµ ÀÖ´Ù.

´ÙÀ½ ·çÇÁ¸¦ µ¹ ¶§ Mid´Â »õ·Î¿î Lower¿Í UpperÀÇ Áß°£ ÁöÁ¡ÀÎ ar[4]·Î À̵¿Çϸç ÀÌ »óÅ¿¡¼­ ar[4]ÀÇ °ª 21°ú ۰ª 29¸¦ ºñ±³ÇØ º¸´Ï ۰¡ ´õ Å©´Ù. ÀÌ °æ¿ì¿¡´Â ar[4]ÀÌÀü¿¡´Â ã´Â ۰¡ ¾ø´Ù´Â °ÍÀ» ¾Ë ¼ö ÀÖÀ¸¸ç Lower°¡ ar[5]·Î À̵¿ÇÑ´Ù. ÀÌ·± ½ÄÀ¸·Î °è¼Ó Àý¹Ý¾¿ °Ë»ö ¹üÀ§¸¦ ÁÙ¿© ³ª°¡´Ù º¸¸é ¾ðÁ¨°¡´Â Mid À§Ä¡¿¡¼­ ۰ªÀ» ãÀ» ¼ö ÀÖ´Ù. ¸¸¾à ã´Â ۰¡ ¹è¿­¿¡ ¾ø´Ù¸é Lower¿Í Upper°¡ °°¾ÆÁö°Å³ª ¾Æ´Ï¸é Lower°¡ ´õ Ä¿Áö´Â »óŰ¡ µÇ´Âµ¥ À̶§´Â ãÁö ¸øÇß´Ù´Â -1À» ¸®ÅÏÇÏ¸é µÈ´Ù.

À̺Р°Ë»öÀº ¹üÀ§¸¦ °è¼Ó Àý¹Ý¾¿ ÁÙ¾î °¡¸é¼­ °Ë»öÇϱ⠶§¹®¿¡ Å×À̺íÀÌ Ä¿µµ ºñ±³ ȸ¼ö°¡ ¸¹Áö ¾ÊÀº °ÍÀÌ ÀåÁ¡ÀÌ´Ù. ¹è¿­ Å©±â°¡ nÀÏ ¶§ ÃÖ¾ÇÀÇ °æ¿ì¶óµµ log2n¹ø ºñ±³ÇÏ¸é ¿øÇÏ´Â °ªÀ» ãÀ» ¼ö ÀÖ´Ù. ±Ø´ÜÀûÀÎ °æ¿ì nÀÌ 40¾ïÀ̶ó ÇÏ´õ¶óµµ ±â²¯ 32¹ø¸¸ ºñ±³ÇÏ¸é µÇ¹Ç·Î ¼øÂ÷ °Ë»ö°ú´Â ºñ±³ÇÒ ¹Ù°¡ ¾Æ´Ï´Ù. À̺Р°Ë»öÀÌ ÀÌ·¸°Ô ¼Óµµ°¡ ºü¸¥ ÀÌÀ¯´Â ÀÚ·á°¡ Å©±â¼øÀ¸·Î Á¤·ÄµÇ¾î Àֱ⠶§¹®ÀÌ´Ù.

±×·¡¼­ À̺Р°Ë»ö¿¡ »ç¿ëÇÒ ÀÚ·á´Â »ðÀÔÇÒ ¶§µµ ¹Ýµå½Ã ÀÌ Á¶°ÇÀ» Áö۵µ·Ï ÁÖÀÇÇØ¾ß ÇÑ´Ù. ¸¸¾à Áß°£¿¡ Á¤·ÄµÇÁö ¾ÊÀº ÀÚ·á°¡ ÀÖ´Ù¸é ´ë¼Ò ºñ±³ ¿¬»ê¹®ÀÇ °á°ú¸¦ ½Å·ÚÇÒ ¼ö ¾øÀ¸¹Ç·Î À̺Р°Ë»ö ¾Ë°í¸®ÁòÀº Á¦´ë·Î µ¿ÀÛÇÏÁö ¾Ê´Â´Ù. Á¤·ÄµÇ¾î ÀÖÁö ¾Ê´Ù¸é Á¤·ÄÇÑ ÈÄ À̺Р°Ë»öÀ» ÇϵçÁö ¾Æ´Ï¸é óÀ½ºÎÅÍ Á¤·Ä »óŸ¦ À¯ÁöÇϵµ·Ï ÀڷḦ °ü¸®ÇØ¾ß ÇÏ´Â ºÎ´ãÀÌ ÀÖ´Ù. ´ÙÇàÈ÷ ¿ø·¡ºÎÅÍ Á¤·ÄµÇ¾î ÀÖ´Â ÀÚ·áµµ ¸¹ÀÌ Àִµ¥ ÀÌ·± ÀÚ·á¿¡ ´ëÇØ¼­´Â ¹Ù·Î À̺Р°Ë»ö ¾Ë°í¸®ÁòÀ» ¾µ ¼ö ÀÖ´Ù.

¶ÇÇÑ Ã³À½ºÎÅÍ ¼ø¼­´ë·Î °Ë»öÇÏ´Â °ÍÀÌ ¾Æ´Ï¶ó Áß°£ ºÎºÐÀ» ÄîÄî Âñ·¯º¸´Â ½ÄÀ̹ǷΠ۰ªÀÌ Áߺ¹µÉ °æ¿ì ¾î¶² ۰¡ °Ë»öµÉÁö ¾Ë ¼ö ¾ø´Â ¸ÍÁ¡ÀÌ ÀÖ´Ù. À§ ¿¹¿¡¼­ ۸¦ 21·Î ¹Ù²Ü °æ¿ì µÎ °³ÀÇ 21Áß ¾î¶² °ªÀÌ °Ë»öµÉ °ÍÀΰ¡¸¦ ¿¹ÃøÇÒ ¼ö ¾øÀ¸¸ç Å×À̺í Å©±â°¡ °¡º¯ÀûÀÏ ¶§´Â »óȲ¿¡ µû¶ó °Ë»öµÇ´Â °ªÀÌ ´Þ¶óÁø´Ù. ŰÀÇ Áߺ¹À» ÇØ°áÇϵçÁö ¾Æ´Ï¸é À̺Р°Ë»öÀ¸·Î À쫆 ̣Àº ÈÄ ¾Æ·¡ À§ÀÇ ·¹Äڵ带 ¼øÂ÷ °Ë»öÇÏ¿© Áߺ¹µÈ °ª Áß Çϳª¸¦ ¼±ÅÃÇØ¾ß ÇÑ´Ù.

À̺Р°Ë»öÀº º¹À⼺¿¡ ºñÇØ È¿À²ÀÌ ±²ÀåÈ÷ ÁÁ±â ¶§¹®¿¡ °Ë»ö ¾Ë°í¸®Áò Áß¿¡´Â °¡Àå ½Ç¿ëÀûÀ̰í ÀÚÁÖ »ç¿ëµÈ´Ù. ±×·¡¼­ C Ç¥ÁØÀº ¶óÀ̺귯¸® Â÷¿ø¿¡¼­ À̺Р°Ë»ö ÇÔ¼ö¸¦ Á¦°øÇϴµ¥ ¹Ù·Î ´ÙÀ½ ÇÔ¼öÀÌ´Ù. ÀÌ ÇÔ¼ö´Â ÀÓÀÇÀÇ Å¸ÀÔ¿¡ ´ëÇØ¼­µµ »ç¿ëÇÒ ¼ö ÀÖ´Ù.

 

void *bsearch( const void *key, const void *base, size_t num, size_t width, int ( __cdecl *compare ) ( const void *elem1, const void *elem2 ) );

 

key´Â ã°íÀÚ ÇÏ´Â °ªÀ̰í base´Â ¹è¿­ ¼±µÎ ¹øÁö, numÀº ¿ä¼Ò °³¼ö, width´Â ¿ä¼ÒÀÇ Å©±âÀÌ´Ù. ±×¸®°í compare´Â »ç¿ëÀÚ°¡ ÁöÁ¤ÇÏ´Â ºñ±³ ÇÔ¼öÀε¥ ºñ±³ ´ë»óÀÌ µÇ´Â µÎ °³ÀÇ °ªÀ» Àü´ÞÇÑ´Ù. compare ÇÔ¼ö´Â ÀÌ µÎ °ªÀ» ºñ±³ÇØ º¸°í ù ¹øÂ° Àμö°¡ ´õ ÀÛÀ¸¸é À½¼ö, °°À¸¸é 0, ´õ Å©¸é ¾ç¼ö¸¦ ¸®ÅÏÇØ¾ß ÇÑ´Ù. ÀÓÀÇÀÇ Å¸ÀÔ¿¡ ´ëÇØ »ç¿ëÇϱâ À§ÇØ void *¸¦ »ç¿ëÇϸç ŸÀÔº°·Î ºñ±³ÇÏ´Â ¹æ¹ýÀÌ ´Ù¾çÇϹǷΠºñ±³ ÇÔ¼ö¸¦ µû·Î Àü´ÞÇÑ´Ù´Â Á¡ÀÌ Á¶±Ý º¹ÀâÇÏÁö¸¸ »ç¿ëÇϱâ´Â ±²ÀåÈ÷ ½¬¿î ÆíÀÌ´Ù. ¾ÕÀÇ ¿¹Á¦¸¦ bsearch ÇÔ¼ö·Î ´Ù½Ã ÀÛ¼ºÇØ º¸ÀÚ.

 

¿¹ Á¦ : bsearch

#include <Turboc.h>

 

int compare(const void *elem1,const void *elem2)

{

     return (*(int *)elem1 - *(int *)elem2);

}

 

void main()

{

     int ar[]={2,6,13,19,21,21,23,29,35,48,62,89,90,95,99,102,109,208,629};

     unsigned num;

     int key;

     int *ptr;

 

     num=sizeof(ar)/sizeof(ar[0]);

     key=29;

     ptr=(int *)bsearch(&key,ar,num,sizeof(int),compare);

     if (ptr==NULL) {

          puts("ã´Â °ªÀÌ ¾ø½À´Ï´Ù.");

     } else {

          printf("ã´Â °ªÀº %d¹øÂ°¿¡ ÀÖ½À´Ï´Ù.\n",ptr-ar);

     }

}

 

À̺Р°Ë»ö ¾Ë°í¸®Áò ±¸ÇöÀº bsearch ÇÔ¼ö ³»ºÎ¿¡¼­ ÇÏ¸ç »ç¿ëÀÚ´Â ÀÌ ÇÔ¼ö°¡ Àü´ÞÇÏ´Â °ªÀ» ºñ±³Çؼ­ ±× °á°ú¸¸ ¸®ÅÏÇÏ¸é µÈ´Ù. compare ÇÔ¼ö´Â µÎ Á¤¼öÀÇ ´ë¼Ò °ü°è¸¦ ºñ±³ÇØ¾ß ÇϹǷΠ´Ü¼øÈ÷ µÎ °ªÀÇ Â÷¸¦ ¸®ÅÏÇÏ¸é µÈ´Ù. ¸¸¾à °Ë»ö ´ë»óÀÌ ¹®ÀÚ¿­À̶ó¸é strcmp(i) ÇÔ¼ö·Î ºñ±³ÇÑ °ªÀ» ¸®ÅÏÇÏ¸é µÈ´Ù. °á°ú´Â ¾ÕÀÇ ¿¹Á¦¿Í µ¿ÀÏÇ쵂 bsearch ÇÔ¼ö´Â ¾î¼Àºí¸®·Î ÀÛ¼ºµÇ¾î ÀÖ°í °íµµ·Î ÃÖÀûÈ­µÇ¾î ÀÖÀ¸¹Ç·Î ÈξÀ ´õ ºü¸£°í ¾ÈÁ¤ÀûÀÌ´Ù.

Á» ´õ ¹ßÀüµÈ À̺Р°Ë»ö ¹æ¹ýÀ¸·Î ÇǺ¸³ªÄ¡ ¼ö¿­À» »ç¿ëÇϰųª º¸°£À» ÇÏ´Â ¹æ¹ýÀÌ ÀÖ´Ù. ÀÌ ¹æ¹ýµéÀº ¹üÀ§¸¦ ÁÙÀÏ ¶§ ۰¡ ¾ø´Ù°í ÆÇ´ÜµÇ´Â ºÎºÐÀ» ºü¸£°Ô °Ç³Ê¶ÜÀ¸·Î½á ´Ü¼ø À̺Р°Ë»ö¿¡ ºñÇØ¼­´Â ¼Óµµ°¡ Á¶±Ý ´õ ºü¸£´Ù. ±×·¯³ª ¾Ë°í¸®ÁòÀÌ ´Ù¼Ò º¹ÀâÇÏ°í ¼ÓµµÂ÷µµ ¸¹ÀÌ ³ª´Â ÆíÀº ¾Æ´Ï¹Ç·Î À̺Р°Ë»öÀÌ ÇÊ¿äÇÒ ¶§´Â Ç¥ÁØ bsearch ÇÔ¼ö Á¤µµ¸é ´ëü·Î ÃæºÐÇÏ´Ù.

À̺Р°Ë»öÀº Áß°£ ºÎºÐÀ» ºü¸£°Ô ¾×¼¼½ºÇÒ ¼ö ÀÖ¾î¾ß ÇϹǷΠ¹è¿­¿¡ ´ëÇØ¼­¸¸ »ç¿ëÇÒ ¼ö ÀÖ´Ù. ¿¬°á ¸®½ºÆ®´Â ¸ñ·Ï»óÀÇ ÀÓÀÇ ³ëµå·Î ¹Ù·Î À̵¿ÇÏ´Â ´É·ÂÀÌ ¾ø±â ¶§¹®¿¡ ¾Æ¹«¸® Á¤·ÄµÇ¾î ÀÖ´õ¶óµµ À̺Р°Ë»öÀ» »ç¿ëÇÒ ¼ö ¾ø´Ù. ¿¬°á ¸®½ºÆ®´Â ¼øÂ÷ÀûÀ¸·Î¸¸ °ªÀ» ÀÐÀ» ¼ö ÀÖÀ¸¹Ç·Î ¿À·ÎÁö ¼øÂ÷ °Ë»ö¸¸ °¡´ÉÇÑ ÀÚ·á ±¸Á¶ÀÌ´Ù.