ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. 1 °³ ¿ä
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 ÀԷ°ª
2.2.1 ¿Â¶óÀÎ ÆÇÁ¤½Ã
2.3 Ãâ·Â°ª
i ¿Í j ±×¸®°í µÑ »çÀÌÀÇ ¼ýÀÚÁß °¡Àå ¸¹Àº cycle length¸¦ °¡Áö´Â ¼ýÀÚ¸¦ Ãâ·ÂÇÑ´Ù.
2.3.1 ¿Â¶óÀÎ ÆÇÁ¤½Ã
3 ¹®Á¦ Ç®ÀÌ3.1 minzkn3.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 ´ä¾È
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 */
|
|
|||||||||||
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|