100¹ø ¹®Á¦ : 3n+1
ÃÑ ÆäÀÌÁö ¼ö : 3224

Àüü ÇÔ¼ö/¿ë¾î»çÀü
Facebook Joinc ±×·ì   Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : ¹Ì´Ï»çÀÌÆ®>Test>ACM>100



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

Contents

1 °³ ¿ä
2 ¹®Á¦ ¼³¸í
2.1 ¹è°æÁö½Ä
2.2 ÀԷ°ª
2.2.1 ¿Â¶óÀÎ ÆÇÁ¤½Ã
2.3 Ãâ·Â°ª
2.3.1 ¿Â¶óÀÎ ÆÇÁ¤½Ã
3 ¹®Á¦ Ç®ÀÌ
3.1 minzkn
3.1.1 ¼³ ¸í
3.1.2 ¼Ò ½º
3.1.3 ´ë È­
3.2 ´ä¾È
4 ¹®Á¦ Ç®ÀÌ
4.1 ¹«ÆÄÀÌ
4.1.1 ¼³ ¸í
4.1.2 ¼Ò ½º
4.1.3 ´ë È­
4.2 ´ä¾È


1 °³ ¿ä


  • ¹®Á¦ Ä«Å×°í¸®: Volume I
  • ¹®Á¦ ¹øÈ£: 100
  • ¹®Á¦ Á¦¸ñ: The 3n + 1 problem
  • [http]¹®Á¦ ¿ø¹®
  • [http]Ranklist
  • Top Rank
    • CPU Time:0:00.000
    • Memory: 64


2 ¹®Á¦ ¼³¸í



2.1 ¹è°æÁö½Ä


ÄÄÇ»ÅÍ °úÇп¡¼­´Â ¾î¶² ÀԷ¿¡ ´ëÇØ¼­ °¡´ÉÇÑ ¸ðµç °ªÀ» Ãâ·ÂÇÏ´Â ¾Ë°í¸®ÁòÀÇ ÀÛ¼ºÀÌ ÇÊ¿äÇÑ °æ¿ì°¡ ¸¹´Ù. ÀÌ·¯ÇÑ ¹®Á¦ÀÇ ÇØ°áÀ» À§Çؼ­ NP, Unsolvable, RecursiveµîÀÇ ±â¹ýÀ» »ç¿ëÇÑ´Ù.

ÁÖ¾îÁø ¾Ë°í¸®ÁòÀº ´ÙÀ½°ú °°Àº ÇÁ·Î½ÃÁ® ÄÚµå·Î Ç¥ÇöµÉ ¼ö ÀÖ´Ù.

1.          input n 
2.          print n 
3.          if n = 1 then STOP 
4.                   if n is odd  
5.                   then  
6.                      n = 3n+1 
7.                   else    
8.                      n = n/2; 
9.          GOTO 2 
 

À§ ¾Ë°í¸®Áò¿¡ 22¸¦ ÀÔ·ÂÇϸé, 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1ÀÇ ÀÏ·ÃÀÇ ¼ýÀÚ¸¦ Ãâ·ÂÇÒ °ÍÀÌ´Ù.

¾Ë°í¸®ÁòÀº ½±°Ô ÀÌÇØÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÁÖ¾îÁø °ªÀÌ È¦¼ö¶ó¸é n*3+1À» Çϰí ¦¼ö¶ó¸é n/2¸¦ ÇÑ´Ù. nÀÌ 1ÀÌ µÉ¶§±îÁö À§ÀÇ ¿¬»êÀ» ¹Ýº¹ÇÑ´Ù. ÀԷ°ªÀÌ ÁÖ¾îÁø »óÅ¿¡¼­ ÀÏ·ÃÀÇ Ãâ·Â°ªÀ» ¾ò¾î³»´Â°Ç ¸Å¿ì ½±´Ù.

¿ì¸®´Â À§ÀÇ ¾Ë°í¸®Áò¿¡¼­ ÀԷ°ª nÀ» ÀÔ·ÂÇϸé 22ÀÇ cycle length 16À̶ó´Â °ÍÀ» ¾Ë¾Æ³¾ ¼ö ÀÖ´Ù.


2.2 ÀԷ°ª


  • i¿Í jÀÇ µÎ°³ÀÇ intÇü °ªÀÌ ÁÖ¾îÁø´Ù.
  • µÎ°³ÀÇ °ªÀº 1,000,000°ú 0»çÀÌ¿¡ Á¸ÀçÇØ¾ß ÇÑ´Ù.
´ç½ÅÀº i¿Í j °ª »çÀÌ¿¡ ÀÖ´Â ¼ýÀÚµéÁß °¡Àå ¸¹Àº cycle length¸¦ °¡Áö´Â ¼ýÀÚ¸¦ ¾ò¾î³»¾ß ÇÑ´Ù.

2.2.1 ¿Â¶óÀÎ ÆÇÁ¤½Ã


  • ÀԷ°ªÀÇ °¢ ¶óÀÎÀº '\n'À¸·Î ³¡³ª¸ç ÀÔ·ÂÀÌ ³¡³­ ÈÄ ¸¶Áö¸· ¶óÀÎÀÇ ½ÃÀÛÀº EOFÀÌ´Ù. ¿¹¸¦µéÀÚ¸é

    1 10 
    100 200 
    201 210 
    900 1000 
    EOF (¾ËÆÄºª EOF°¡ ¾Æ´Ï´Ù! -.-) 
     


2.3 Ãâ·Â°ª


i ¿Í j ±×¸®°í µÑ »çÀÌÀÇ ¼ýÀÚÁß °¡Àå ¸¹Àº cycle length¸¦ °¡Áö´Â ¼ýÀÚ¸¦ Ãâ·ÂÇÑ´Ù.

  • ÀԷ°ª ¿¹

    1 10 
    100 200 
    201 210 
    900 1000 
     

  • Ãâ·Â°ª ¿¹

    1 10 20 
    100 200 125 
    201 210 89 
    900 1000 174 
     

2.3.1 ¿Â¶óÀÎ ÆÇÁ¤½Ã


  • Ãâ·Â°ª¿¡µµ ÀԷ½Ãó·³ ¸ðµç Ãâ·Â°ªÀÌ ³¡³­ÈÄ ¸¶Áö¸· ¶óÀÎÀÇ ½ÃÀÛ¿¡ EOF¸¦ ºÙ¿©¾ß Çϴ°ÇÁö´Â Å×½ºÆ®¸¦ ÇØ º¼ Çʿ䰡 ÀÖ´Ù.


3 ¹®Á¦ Ç®ÀÌ


3.1 minzkn


3.1.1 ¼³ ¸í


Àú´Â ÀÌ ¹®Á¦¿¡ ´ëÇØ¼­ °è»ê¿¡ ´ëÇÑ ÃÖÀûÈ­´Â ¸øÇÏ¿´Áö¸¸ ¹Ýº¹ÀûÀÎ ·çÇÁ¸¦ ÁÙÀ̰íÀÚ ÀÌÀü°ªÀ» cache ÇØµÎ°í ÀÏÄ¡ÇÏ´Â ½ÃÁ¡¿¡¼­ cache µÈ °ªÀ» ´õÇÏ¿© ·çÇÁ Ƚ¼ö¸¦ ÁÙÀÌ´Â ¹æ¹ýÀ» °í¾ÈÇÏ¿´½À´Ï´Ù. °ªÀÇ ¹üÀ§°¡ 0 ~ 1000000 »çÀÌÀΰæ¿ì ÃÖ´ë cache Å©±â´Â sizeof(int) * 1000000 = 4000000 = ¾à 4MBytes ÀÇ ¸Þ¸ð¸®°¡ ¼Ò¿äµÇ´Â ´ÜÁ¡ÀÌ ÀÖÁö¸¸ ±×¸¸Å­ ¼Óµµ´Â ...

3.1.2 ¼Ò ½º



/*
 Copyright (C) Information Equipment co.,LTD.
 All rights reserved.
 Code by JaeHyuk Cho <mailto:minzkn@infoeq.com>

 ID="$Id: Site_2fTest_2fACM_2f100,v 1.1 2007/01/09 02:46:19 root Exp root $"
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef unsigned int t_cycle_value;

struct ts_cycle_report
{
 t_cycle_value min, max; /* range */
 t_cycle_value *cache;
 t_cycle_value index, value;
 t_cycle_value result;
};

static __inline void cycle_length(struct ts_cycle_report *s_context)
{
 t_cycle_value s_value = s_context->value;
 s_context->cache[s_context->index] = s_value > 0;
 while(s_value > 1)
 {
  if(s_value & 1)s_value = (s_value << 1) + s_value + 1;
  else s_value >>= 1;
  if((s_value < s_context->value) && (s_value >= s_context->min))
  {
   s_context->cache[s_context->index] += s_context->cache[s_value - s_context->min];
   break;
  }
  s_context->cache[s_context->index]++;
 }
 if(s_context->result < s_context->cache[s_context->index])s_context->result = s_context->cache[s_context->index];
}

int main(int s_argc, char *s_argv[])
{
 unsigned int i, j;
 struct ts_cycle_report s_context;

 if(s_argc >= 3)
 { /* arg input */
  i = (unsigned int)atoi(s_argv[1]);
  j = (unsigned int)atoi(s_argv[2]);
 }
 else
 {
  do
  { /* input */
   (void)fprintf(stdout, "input : ");
   (void)fflush(stdout);
  }while(scanf("%u %u", &i, &j) != 2);
 }

 if(i > j){ i ^= j; j ^= i; i ^= j; } /* swap */

 s_context.min = (t_cycle_value)i, s_context.max = (t_cycle_value)j;
 s_context.cache = (t_cycle_value *)malloc(sizeof(t_cycle_value) * ((j - i) + 1));
 if(s_context.cache == ((t_cycle_value *)0))
 {
  (void)fprintf(stdout, "not enough memory\n");
  return(1);
 }

 s_context.result = 0;
 for(s_context.index = 0, s_context.value = i;s_context.value <= j;s_context.index++, s_context.value++)
 {
  cycle_length((struct ts_cycle_report *)(&s_context));
 }

 if(s_context.cache != ((t_cycle_value *)0))free((void *)s_context.cache);

 (void)fprintf(stdout, "%u ~ %u => %u\n", s_context.min, s_context.max, s_context.result);

 return(0);
}

/* End of source */

3.1.3 ´ë È­


3.2 ´ä¾È

 
À̸§
Á¦¸ñ
º¯°æÀÏ
Å©±â
YundreamÀÇ ´ä¾È
2007/01/09 11:46
917



4 ¹®Á¦ Ç®ÀÌ


4.1 ¹«ÆÄÀÌ


4.1.1 ¼³ ¸í


¿¹Àü¿¡ ±×³É ¹«½ÄÇÑ ¹æ¹ýÀ¸·Î Ç®¾úÁö¸¸, java ¹öÀüÀÌ ¾ø±æ·¡ ÇÑ ¹ø ¿Ã·Áº¾´Ï´Ù.
¼Óµµ °³¼±ÀÇ ¿©Áö°¡ ¸¹À» µí...

4.1.2 ¼Ò ½º



/* 
 Copyright (C) Information Equipment co.,LTD. 
 All rights reserved. 
 Code by JongAm oh <mailto:muphy78@empal.com> 
 
*/ 
 
public class ACM1 { 
       
              private static int getCycleLen(int in) { 
                      int cycleLen = 1; 
                      int init = in; 
                      while(init != 1) { 
                              if(init%2 == 1) { 
                                      init = 3*init+1; 
                              } else { 
                                      init = init/2; 
                              } 
                              cycleLen++; 
                      }  
                      return cycleLen; 
              } 
              private static int[] getCycleLenArray(int _start, int _end) { 
                      int start = _start; 
                      int end = _end; 
                      int i = 0; 
                      if(_start < 0 || _end < 0 ) return null; 
                      int[] cycleLenArray = new int[end-start+1]; 
                      for(int j = start ; start <= end; j++) { 
                              cycleLenArray[i] = getCycleLen(start); 
                              i++; 
                              start++; 
                      } 
                      return cycleLenArray; 
              } 
               
              private static int getMax(int[] in) { 
                      int MAX = 0; 
                      if(in == null) return 0; 
                      for(int i =0; i<in.length;i++) { 
                              if(MAX < in[i]) 
                                MAX = in[i]; 
                      } 
                      return MAX; 
              } 
               
              private static void printOneLine(int _start, int _end) { 
                      System.out.println(_start+"        "+_end+"        "+getMax(getCycleLenArray(_start,_end))); 
              } 
               
              public static void main(String args[]) { 
                      printOneLine(900,1000); 
              } 
      }  
/* End of source */ 
 

4.1.3 ´ë È­


4.2 ´ä¾È

EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù.