ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. ¼Ò°³
¿©±â¿¡¼´Â ´ÙÁßÀÇ ¸ÓÁö¼ÒÆ®(Merged Sort)¿¡ ´ëÇØ¼ »ý°¢ÇØ º¸µµ·Ï ÇϰڴÙ. ¸ÓÁö¼ÒÆ®¸¦ Çϱâ À§Çؼ´Â 3°³ÀÇ ¹öÆÛ°¡ ÇÊ¿äÇÏ´Ù´Â °ÍÀ» ¾Ë°í ÀÖÀ» °ÍÀÌ´Ù. ![]()
![]()
3°³ÀÇ A, B, C ±×·ìÀÌ ÀÖ°í, C±×·ìÀÇ µ¥ÀÌÅ͵éÀ» ¸ÓÁö¼ÒÆ®ÇÑ °á°ú¿Í B±×·ìÀÇ µ¥ÀÌÅ͵éÀ» ¸ÓÁö¼ÒÆ®ÇÑ °á°ú¸¦ ´Ù½Ã ¸ÓÁö ¼ÒÆ®Çϰí, ÀÌ °á°ú¸¦ ´Ù½Ã A±×·ìÀÇ ¸ÓÁö¼ÒÆ®ÇÑ °á°úÀÇ ¸ÓÁö¼ÒÆ®ÇØ¼ ÃÖÁ¾ °á°ú¸¦ °¡Á®¿Â´Ù.
ÀÌ·¯ÇÑ ¿ä±¸´Â °°ÀÌ °¡ÁßÄ¡(Level)¸¦ ´Þ¸®ÇÏ´Â ¼·Î´Ù¸¥ ±×·ì¿¡ ´ëÇØ¼ ¸ÓÁö¼ÒÆ®Çϰí ÀÌµé ±×·ìÀ» ´Ù½Ã ¸ÓÁö¼ÒÆ®ÇØ¼ Score¸¦ »êÃâÇØ¾ß ÇÏ´Â °Ë»ö¿£Áøµî¿¡¼ ¹ß»ýÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù.
°£´ÜÈ÷ »ý°¢ÇÏÀÚ¸é, °¢ ±×·ìÀ» ¸ÓÁö¼ÒÆ®Çϴµ¥ 3°³ÀÇ ¹öÆÛ°¡ ÇÊ¿äÇϹǷÎ, 3x2 = 6°³ÀÇ ¹öÆÛ·Î ÇÊ¿äÇÑ °è»êÀ» ÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ±×·¯³ª ÀÌ °æ¿ì ´ë·®ÀÇ ¸Þ¸ð¸®¸¦ ³¶ºñÇÒ ¼ö ÀÖ´Ù´Â ¹®Á¦°¡ ¹ß»ýÇÑ´Ù. ¸ÓÁö¼ÒÆ®ÇØ¾ßÇÒ µ¥ÀÌÅͰ¡ 1,000,000ÀÇ ·¹ÄÚµå·Î ÀÌ·ç¾îÁ® ÀÖ°í, °¢°¢ÀÇ ·¹ÄÚµåÀÇ Å©±â°¡ 20byte Á¤µµ¶ó¸é ÇѹøÀÇ ¸ÓÁö¼ÒÆ®¸¦ À§Çؼ 120MÀÇ ¸Þ¸ð¸®¸¦ ¼ÒºñÇØ¾ß ÇÑ´Ù. ¿©±â¿¡ µ¿½ÃÁ¢¼Ó±îÁö Á¦¾îÇØ¾ß ÇÏ´Â ¼ºñ½º¿¡ »ç¿ëµÉ ¿£ÁøÀ̶ó¸é, 10¸íÀÌ Á¢¼ÓÇßÀ» ¶§, 1.2±â°¡ÀÇ ¸Þ¸ð¸®¸¦ ¼ÒºñÇÏ°Ô µÈ´Ù.
ÀÌ·¯ÇÑ °æ¿ì memoryÇ®À» À¯ÁöÇØ¼, ÇÒ´çÇÏ´Â µîÀÇ ¹æ¹ýÀ» °í·ÁÇØ¾ß °ÚÀ¸³ª ¿ì¼±ÀûÀ¸·Î »ç¿ëÇÑ ¸Þ¸ð¸®ÀÇ ¾çÀ» ÁÙÀÏ Çʿ䰡 ÀÖ´Ù. ÀÌ ¹æ¹ý¿¡ ´ëÇØ¼ °í¹ÎÇØº¸±â·Î Çß´Ù. ¹öÆÛ ·¹ÆÛ·±½º °ü¸®
ÀÌ ¹®Á¦¸¦ ÇØ°áÇϱâ À§Çؼ °¡´ÉÇÑ ÃÖ¼ÒÀÇ ¹öÆÛ¸¦ ¸¸µé¾î ·¹ÆÛ·±½º¸¦ ÀÌ¿ëÇØ¼ Àç»ç¿ëÇÏ´Â ¹æ¹ýÀ» »ý°¢ÇØ º¸¾Ò´Ù. ¹öÆÛÇ®À» À¯ÁöÇϱâ À§ÇÑ ¹æ¹ýÀ̶ó°í º¼ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ![]()
¿©±â¿¡´Â 4°³ÀÇ ¹öÆÛ°¡ »ç¿ëµÈ´Ù.
¾ÆÀ̵ð¾î ±¸Çö¿¡ ÁýÁßÇϱâ À§Çؼ STLÀ» »ç¿ëÇß´Ù.
#include <iostream>
#include <vector>
#include <stdlib.h>
#include <unistd.h>
using namespace std;
#define BUFSIZE 4
class Buff
{
private:
int currentIdx;
vector<int *> LBuf;
int *tmpptr;
public:
Buff()
{
currentIdx = 0;
}
void Set(int *a)
{
LBuf.push_back(a);
}
void Clear()
{
LBuf.clear();
}
// Merged Sort¸¦ ÇÑ´Ù.
// ¿©±â¿¡¼´Â + ¿¬»êÀ» ÇÑ´Ù.
void SetUnion(int a)
{
int current = (currentIdx+1)%3;
int prev = (currentIdx)%3;
int tmp = (currentIdx+2)%3;
if (*LBuf[prev] != -1)
{
currentIdx++;
}
*LBuf[current] = a;
*LBuf[tmp] = a + *LBuf[prev];
printf("Debug %d + %d = %d\n", *LBuf[current], *LBuf[prev], *LBuf[tmp]);
currentIdx ++;
tmpptr = LBuf[(currentIdx)%3];
}
// °á°ú°¡ ÀúÀåµÈ ¹öÆÛÀÇ ·¹ÆÛ·±½º¸¦ ³Ñ°ÜÁØ´Ù.
int *GetSumResult()
{
return tmpptr;
}
int TmpIdx()
{
return currentIdx;
}
};
class BufManager
{
private:
int *a;
vector<Buff> NodeBuf;
int checkIdx;
public:
BufManager()
{
// ¹öÆÛ¸¦ 4°³ ÇÒ´çÇÑ´Ù.
a = (int *)malloc(sizeof(int) * BUFSIZE);
checkIdx = 3;
}
void Run()
{
Buff lBuff1, lBuff2;
// °¢°¢ÀÇ Buff1¿¡ 3°³¾¿ÀÇ ¹öÆÛÀÇ ·¹ÆÛ·±½º¸¦ ÇÒ´çÇÑ´Ù.
for (int i = 0; i < BUFSIZE; i++)
{
a[i] = -1;
if (&a[i] != &a[checkIdx])
{
lBuff1.Set(&a[i]);
}
}
NodeBuf.push_back(lBuff1);
for (int i = 0; i < BUFSIZE; i++)
{
a[i] = -1;
if (&a[i] != &a[checkIdx])
{
lBuff1.Set(&a[i]);
}
}
NodeBuf.push_back(lBuff2);
int idxflag = 0;
int idx;
// 2°³ÀÇ ±×·ìÀÌ ÀÖ´Ù°í °¡Á¤ÇÏ°í ·çÇÁ¸¦ µ¹·È´Ù.
for (int i = 0; i < 2; i++)
{
Buff Bf;
idxflag = i % 2;
printf("Node Number %d\n", idxflag);
getchar();
// 101¹øÀÇ merged Sort°¡ ÀÌ·ç¾îÁø´Ù°í °¡Á¤ÇÑ´Ù.
for (int k = i; k < 101+i; k++)
{
NodeBuf[idxflag].SetUnion(k);
}
// merged Sort°¡ ³¡³µ´Ù¸é, ¹öÆÛ¸¦ ÃʱâÈ ÇÑ´Ù.
NodeBuf[idxflag].Clear();
checkIdx = NodeBuf[idxflag].TmpIdx();
// 2°³ÀÇ ¹öÆÛ¿¡ °á°ú°ªÀÌ ¸¸µé¾îÁ³´Ù¸é, ÀÌ µÎ°³¸¦ ´Ù½Ã Merged sortÇÑ´Ù.
// ¾Æ·¡ÀÇ ÄÚµå´Â SetUnion ¸Þ¼µå¸¦ »ç¿ëÇϵµ·Ï ¹Ù²Ü ¼ö ÀÖÀ» °ÍÀÌ´Ù.
if (i > 0)
{
printf("RESULT : %d : %d\n", *NodeBuf[0].GetSumResult(), *NodeBuf[1].GetSumResult() );
getchar();
}
// ´ÙÀ½ LevelÀÇ Merged Sort¸¦ À§Çؼ 3°³ÀÇ ¸Þ¸ð¸®ÀÇ ·¹ÆÛ·±½º¸¦ ÇÒ´çÇÑ´Ù.
// À̶§ ÀÌÀü¿¡ °á°ú°ªÀÌ ÀÖ´Â ¸Þ¸ð¸®´Â »ç¿ëÇÏÁö ¾Êµµ·Ï ÇÑ´Ù.
for (int k = 0; k < BUFSIZE; k++)
{
// ÁÖ¼Ò°ªÀÌ °°Áö ¾ÊÀ» °æ¿ì¿¡¸¸ ÇÒ´çÇÑ´Ù.
if (&a[k] != NodeBuf[idxflag].GetSumResult())
{
a[k] = -1;
printf("SET %d\n", k);
Bf.Set(&a[k]);
}
}
NodeBuf[idxflag?0:1] = Bf;
printf("Current Result : %d\n", *NodeBuf[idxflag].GetSumResult());
getchar();
}
}
};
int main(int argc, char **argv)
{
BufManager *MyBuff;
MyBuff = new BufManager();
MyBuff->Run();
}
¾à°£ ¼öÁ¤µÈ ÄÚµå
µ¿ÀÏÇÏ°Ô SetUnion ¸Þ¼µå¸¦ »ç¿ëÇϵµ·Ï ¾à°£ ¼öÁ¤Çß´Ù. #include <iostream>
#include <vector>
#include <stdlib.h>
#include <unistd.h>
using namespace std;
#define BUFSIZE 4
class Buff
{
private:
int currentIdx;
vector<int *> LBuf;
int *tmpptr;
public:
Buff()
{
currentIdx = 0;
}
void Set(int *a)
{
LBuf.push_back(a);
}
void Clear()
{
LBuf.clear();
}
void SetUnion(int a)
{
int current = (currentIdx+1)%3;
int prev = (currentIdx)%3;
int tmp = (currentIdx+2)%3;
if (*LBuf[prev] != -1)
{
currentIdx++;
}
*LBuf[current] = a;
*LBuf[tmp] = a + *LBuf[prev];
printf("Debug %d + %d = %d\n", *LBuf[current], *LBuf[prev], *LBuf[tmp]);
currentIdx ++;
tmpptr = LBuf[(currentIdx)%3];
}
int *GetSumResult()
{
return tmpptr;
}
int TmpIdx()
{
return currentIdx;
}
};
class BufManager
{
private:
int *a;
vector<Buff> NodeBuf;
int checkIdx;
public:
BufManager()
{
a = (int *)malloc(sizeof(int) * BUFSIZE);
checkIdx = 3;
}
void Run()
{
Buff lBuff1, lBuff2;
for (int i = 0; i < BUFSIZE; i++)
{
a[i] = -1;
if (&a[i] != &a[checkIdx])
{
lBuff1.Set(&a[i]);
}
}
NodeBuf.push_back(lBuff1);
for (int i = 0; i < BUFSIZE; i++)
{
a[i] = -1;
if (&a[i] != &a[checkIdx])
{
lBuff1.Set(&a[i]);
}
}
NodeBuf.push_back(lBuff2);
int idxflag = 0;
int idx;
for (int i = 0; i < 3; i++)
{
Buff Bf;
idxflag = i % 2;
printf("Node Number %d\n", idxflag);
getchar();
for (int k = 0; k < 10; k++)
{
NodeBuf[idxflag].SetUnion(k);
}
NodeBuf[idxflag].Clear();
checkIdx = NodeBuf[idxflag].TmpIdx();
if (i > 0)
{
int another = idxflag?0:1;
printf("RESULT : %d : %d\n", *NodeBuf[idxflag].GetSumResult(), *NodeBuf[another].GetSumResult() );
NodeBuf[idxflag].SetUnion(*NodeBuf[another].GetSumResult());
printf("Current Result : %d\n", *NodeBuf[idxflag].GetSumResult());
getchar();
}
for (int k = 0; k < BUFSIZE; k++)
{
if (&a[k] != NodeBuf[idxflag].GetSumResult())
{
a[k] = -1;
Bf.Set(&a[k]);
}
}
NodeBuf[idxflag?0:1] = Bf;
//printf("Current Result : %d\n", *NodeBuf[idxflag].GetSumResult());
getchar();
}
}
};
int main(int argc, char **argv)
{
BufManager *MyBuff;
MyBuff = new BufManager();
MyBuff->Run();
}
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|