°­ÁÂ¿Í ÆÁ

µÎ Á¤¼ö¸¦ ±³È¯ÇÏ´Â ¿©·¯ °¡Áö ¾Ë°í¸®Áò ¼Óµµ ºñ±³ ³¯Â¥:2021-4-24 3:56:08 Á¶È¸¼ö:15371
ÀÛ¼ºÀÚ : ÀÛ°¡K
Æ÷ÀÎÆ® : 2339
°¡ÀÔÀÏ : 2020-02-14 22:27:56
¹æ¹®È½¼ö : 357
±Û 260°³, ´ñ±Û 100°³
¼Ò°³ : öµé±â¸¦ °ÅºÎÇÏ´Â °³±¸ÀïÀÌ ÇÁ·Î±×·¡¸Ó
ÀÛ¼º±Û º¸±â
ÂÊÁö º¸³»±â
µÎ °ªÀ» ±³È¯ÇÏ´Â swap ¿¬»êÀº ¿©·¯ °¡Áö ¾Ë°í¸®Áò¿¡ µÎ·ç ¾²ÀδÙ.
µ¿ÀÛÀº °£´ÜÇÏÁö¸¸ È£Ãâ Ƚ¼ö°¡ ¸¹¾Æ ÀÌ ÇÔ¼ö°¡ »¡¶ó¾ß Àüü ¾Ë°í¸®Áòµµ »¡¶óÁø´Ù.
¶ÇÇÑ ±³È¯ ŸÀÔ¿¡ µû¶ó ¿©·¯ ¹úÀÇ ÇÔ¼ö°¡ ÇÊ¿äÇÏ´Ù.
C++ Ç¥ÁØ ¶óÀ̺귯¸®ÀÎ STLÀº ÅÛÇø´À¸·Î ŸÀÔ µ¶¸³¼ºÀ» È®º¸ÇÑ´Ù.
Ç¥ÁØ swap ÇÔ¼ö¿Í Á÷Á¢ ¸¸µç ÇÔ¼ö, ¸ÅÅ©·Î ÇÔ¼ö µîÀÇ ¼Óµµ¸¦ ºñ±³ÇØ º¸¾Ò´Ù.
 
#include <iostream>
#include <algorithm>
#include <time.h>
using namespace std;
 
#define SWAP(x,y,t) {t=x;x=y;y=t;}
 
void inline Swap(int& left, int& right)
{
     int t;
     t = left;
     left = right;
     right = t;
}
 
int main()
{
     time_t t1, t2;
     int left = 3, right = 4;
 
     // STLÀÇ swap ÇÔ¼ö
     time(&t1);
     for (int i = 0; i < 1000000001; i++) {
          std::swap(left, right);
     }
     time(&t2);
     printf("swap : left=%d, right = %d, ½Ã°£=%dÃÊ\n", left, right, (int)difftime(t2, t1));
 
     // Á÷Á¢ ¸¸µç Swap ÇÔ¼ö
     time(&t1);
     for (int i = 0; i < 1000000001; i++) {
          Swap(left, right);
     }
     time(&t2);
     printf("Swap : left=%d, right = %d, ½Ã°£=%dÃÊ\n", left, right, (int)difftime(t2, t1));
 
     // ¸ÅÅ©·Î ÇÔ¼ö
     time(&t1);
     int t;
     for (int i = 0; i < 1000000001; i++) {
          SWAP(left, right, t);
     }
     time(&t2);
     printf("SWAP : left=%d, right = %d, ½Ã°£=%dÃÊ\n", left, right, (int)difftime(t2, t1));
 
     // Á÷Á¢ ±³È¯
     time(&t1);
     for (int i = 0; i < 1000000001; i++) {
          t = left; left = right;    right = t;
     }
     time(&t2);
     printf("Á÷Á¢ : left=%d, right = %d, ½Ã°£=%dÃÊ\n", left, right, (int)difftime(t2, t1));
 
     // +/-
     time(&t1);
     for (int i = 0; i < 1000000001; i++) {
          left = left + right; right = left - right; left = left - right;
     }
     time(&t2);
     printf("+/- : left=%d, right = %d, ½Ã°£=%dÃÊ\n", left, right, (int)difftime(t2, t1));
 
     // XOR
     time(&t1);
     for (int i = 0; i < 1000000001; i++) {
          left = left ^ right; right = left ^ right; left = left ^ right;
     }
     time(&t2);
     printf("XOR : left=%d, right = %d, ½Ã°£=%dÃÊ\n", left, right, (int)difftime(t2, t1));
}

°¢ ¾Ë°í¸®ÁòÀ¸·Î µÎ °³ÀÇ Á¤¼ö¸¦ ±³È¯Ç쵂 1¾ï 1¹ø ¹Ýº¹ÇÏ¿© ½ÇÁ¦ °ªÀÌ ¹Ù²îµµ·Ï Çß´Ù. ÀÌ ¿¹Á¦¸¦ ¸¸µé ¶§ STLÀÇ °íµµ·Î ÃÖÀûÈ­µÈ ¾Ë°í¸®ÁòÀÌ Á» ´õ ºü¸£Áö ¾ÊÀ»±î ³»½É ±â´ëÇß´Ù. ±×·¯³ª ½ÇÇà °á°ú¸¦ º¸¸é ¿ÏÀü µÞÅë¼ö¸¦ ¸Â´Â ´À³¦ÀÌ´Ù.

swap : left=4, right = 3, ½Ã°£=54ÃÊ
Swap : left=3, right = 4, ½Ã°£=14ÃÊ
SWAP : left=4, right = 3, ½Ã°£=2ÃÊ
Á÷Á¢ : left=3, right = 4, ½Ã°£=2ÃÊ
+/- : left=4, right = 3, ½Ã°£=4ÃÊ
XOR : left=3, right = 4, ½Ã°£=3ÃÊ

STLÀÇ swap ÇÔ¼ö°¡ Á¦ÀÏ ´À¸®´Ù. ¼Ò½º¸¦ ã¾Æ º¸¸é ÅÛÇø´À¸·Î ŸÀÔ¿¡ µ¶¸³ÀûÀ̸ç inline ÁöÁ¤±îÁö µÇ¾î ÀÖ°í ·¹ÆÛ·±½º Àμö¸¦ ¹Þ´Â´Ù. ±×·¯³ª ³»ºÎ¿¡ ÀÌ»óÇÑ ¸ÅÅ©·Î·Î ¶±Ä¥ÀÌ µÇ¾î Àִµ¥ ¾Æ¸¶µµ °´Ã¼ÀÎ °æ¿ì ÇÊ¿äÇÑ Á¶Ä¡¸¦ ÃëÇϱâ À§ÇÑ ÄÚµåÀÎ °Í °°´Ù. ŸÀÔ µ¶¸³ÀûÀ¸·Î ¸¸µé´Ù º¸´Ï ¼Óµµ´Â ±×¾ß ¸»·Î ÇüÆí¾ø´Ù. ¿ø·¡ºÎÅÍ STLÀ» ÁÁ¾ÆÇÏÁö ¾Ê¾ÒÁö¸¸ ÀÌ·¸°Ô ¾û¸ÁÀÏ ÁÙÀº ¿¹»óÇÏÁö ¸øÇß´Ù.
±×·¸´Ù¸é STLÀÇ ºÒÇÊ¿äÇÑ Äڵ带 °È¾î ³»°í Á÷Á¢ int, char ŸÀÔ¿¡ ´ëÇÑ Swap¸¸ µÎ ¹ú ¸¸µé¸é ¾î¶³±î ½Í¾î ¸¸µé¾î º¸¾Ò´Ù. STL¿¡ ºñÇØ¼­´Â ¼¼ ¹è Á¤µµ ´õ ºü¸¥µ¥ ºÒÇÊ¿äÇÑ Äڵ尡 Á¦¿ÜµÇ¾î¼­ ±×·¸´Ù. ÀÌ °á°ú¸¦ º¸°í ŸÀÔ µ¶¸³ÀÌ°í ¹¹°í STLÀº °³³ª Áà ¹ö·Á¶ó´Â »ý°¢ÀÌ ´õ ±»¾îÁö°Ô µÇ¾ú´Ù.
SWAP ¸ÅÅ©·Î´Â ´Ü 2Ãʹۿ¡ °É¸®Áö ¾Ê´Â´Ù. ¿ª½Ã ´Ü¼ø ¹«½ÄÇÑ°Ô ÃÖ°í´Ù. ´Ù¸¸ ¸ÅÅ©·Î´Â Àӽà º¯¼ö t¸¦ ¿ÜºÎ¿¡ º°µµ·Î ¼±¾ðÇØ ³õ¾Æ¾ß Çϰí Àμö·Îµµ Àü´ÞÇØ¾ß ÇÑ´Ù´Â Á¡¿¡¼­ ±ò²ûÇÏÁö ¸øÇÏ´Ù. ±×·¯³ª ¸Å¹ø Áö¿ª º¯¼ö¸¦ »õ·Î ¸¸µå´Â °Íº¸´Ù´Â È®½ÇÈ÷ ºü¸£´Ù. ¸ÅÅ©·Î ´ë½Å Á÷Á¢ Äڵ带 Àü°³ÇÏ´Â °Íµµ °á°ú´Â ´ç¿¬È÷ °°´Ù. ÀÌ°Ô ´Ù¸£¸é ¸»ÀÌ ¾ÈµÈ´Ù.
´ÙÀ½À¸·Î µÎ °ªÀ» +, - ¿¬»êÀÚ·Î ´õÇÏ°í »©´Â ¹æ¹ý°ú XOR ¿¬»êÀÇ Æ¯¼öÇÔÀ» ÀÌ¿ëÇÏ´Â ¹æ¹ýÀÌ Àִµ¥ Àӽà º¯¼ö°¡ ¾ø¾îµµ µÈ´Ù´Â ÀåÁ¡Àº ÀÖÁö¸¸ ±× »ÓÀÌ´Ù. Äڵ尡 ªÀº °Íµµ ¾Æ´Ï°í ¼Óµµ°¡ ´õ ºü¸¥ °Íµµ ¾Æ´Ï´Ù. Á» ½Å±âÇØ º¸ÀÏ »ÓÀÌ´Ù. °á·ÐÀûÀ¸·Î µÎ °ªÀ» ±³È¯ÇÒ ¶§´Â ¿ª½Ã temp¸¦ °ÅÃÄ »óÈ£ ´ëÀÔÇÏ´Â ¹æ¹ýÀÌ °¡Àå ºü¸£´Ù.

 



µ· ¸ø ¹ú¾îµµ ÁÁ´Ù. Áñ°Ì°Ô »ì¸é µÈ´Ù.

¸ñ·Ïº¸±â »èÁ¦ ¼öÁ¤ ½Å°í ½ºÅ©·¦


·Î±×ÀÎÇÏ¼Å¾ß ´ñ±ÛÀ» ´Þ ¼ö ÀÖ½À´Ï´Ù.