ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. ¹®Á¦
2°³ÀÇ Á¤·ÄµÈ ¹è¿ÀÌ ÀÖ´Ù. À̸¦ ÇÕÃÆÀ» ¶§, Áß°£°ªÀ» ã¾Æ¾ß ÇÑ´Ù. ¹®Á¦¿¡ Àǰß
ÀϹÝÀûÀÎ ÇÕº´Á¤·ÄÀ» ÀÌ¿ëÇÏ¸é ¹®Á¦¸¦ ÇØ°áÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÇÏÁö¸¸ Áß°£°ªÀ» ã´Â´Ù°í ÇÑ´Ù¸é, ¿ÏÀüÇÑ ÇÕº´Á¤·ÄÀ» ÇÒ Çʿ䰡 ¾øÀ» °ÍÀÌ´Ù. ±×·¸´Ù¸é ¾îµò°¡¿¡ ¼º´ÉÀ» °³¼±ÇÒ ¿©Áö°¡ ÀÖÀ» °ÍÀÌ´Ù. ÀϹÝÀûÀÎ ÇÕº´Á¤·Ä
ÀüÇüÀûÀÎ ÇÕº´Á¤·ÄÀÌ´Ù. ÀÌ¹Ì ¸¸µé¾îÁø Äڵ带 Âü°íÇϱ⠹ٶõ´Ù. ÀϹÝÀûÀÌÁö¸¸ ¼º´É°³¼±Àº ±â´ëÇÒ ¼ö ¾ø´Ù. ¼º´É °³¼±
Áß°£°ªÀÌ ÇÊ¿äÇÏ´Ù¸é, ±»ÀÌ ¿ÏÀüÇÑ ÇÕº´Á¤·ÄÀÇ Çʿ䰡 ¾øÀ» °ÍÀÌ´Ù. ÀϺκп¡ ´ëÇÑ ÇÕº´Á¤·Ä¸¸À¸·Îµµ ¿øÇÏ´Â °ªÀ» ã¾Æ³¾ ¼ö ÀÖ´Ù. +---------------------------------------+
| Array A |
+---------------------------------------+
+---------+ | +--+
| | | | | Array B
+---------+ | +--+
|
<---| À̵¿
´ÙÀ½°ú °°Àº ¹æ¹ýÀ» ÀÌ¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
¿¹¿Ü»çÇ×
ÀÌ ¿¹¿Ü »çÇ×Àº Array A¿Í Array BÀÇ ¿ø¼Ò°¡ Áߺ¹µÇÁö ¾ÊÀ» °æ¿ì¿¡ ÇØ´çµÈ´Ù. ¹è¿°ú ¹è¿ÀÇ ¹üÀ§°¡ °ãÄ¡Áö ¾ÊÀ» ¶§+----------++---------------------+ | Array B || Array A | +----------++---------------------+
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"); } ÇØ¾ßÇÒÀÏ
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|