조띵의지극히개인적인공간

집에서 틈틈히 안드로이드 공부를 하면서 겔텝에 다운도 받아보고 그러고 있다.

그러던 와중 주말에 부모님댁에 왔는데.. 시간도 남을 겸 공부도 할겸

집에 항상 켜놓는 원격 서버에 접속해서 안드로이드 공부를 하는데... 문뜩 겔텝에 프로그램을 다운받고 싶어서 인터넷 검색을 해보았다.

Android remote debugging...

역쉬. .구글은 날 실망시키지 않았다.

몇가지 방법중.. 단말기 터미널로 관리자 권한을 획득하여 adb의 포트를 설정 하는 방법이였는데 살짝 복잡하고 해서... 간단히 adb wifi 앱을 다운받았다.

adb wifi 앱은 root 권한이 필요하며 기존에 컴퓨터와 단말기간 usb 연결이 아닌 ip 연결을 할 수 있도록 지원해준다.

켈텝에서 adb wifi를 실행시키고.. 

수원에 있는 컴퓨터에 원격접속으로 로그인 한다음

명령어 창에.. 

adb connect xxx.xxx.xxx.xxx

연결이 성공하였다는 메시지가 뜨고...

이클립스에서 몇줄 수정후 실행을 하자 당연한 얘기지만 신기하게 내 핸드폰으로 실행이 되었다..ㅋ

심지어 logcat도 줄줄 나오고... 디버깅까지!!! 띠용..



내친김에 android용 window terminal client를 찾아보았다. 꽤 비싼 유료 앱도 있었는데 PocketCloud 라는 괜찮은 무료 앱도 있다. 



상황이 이렇게 되니... 화장실에 앉아서  윈도우 터미널로 수원집 컴퓨터에 접속을 하고 소스 몇줄 수정해서 빌드 & 런 을 하니 내 겔텝으로 바로 실행이 되버린다.. 허..참...


물론 겔텝에서 윈도우 터미널에 접속하여 소스코드를 고치기에는 조금 인내심이 필요하긴 하다.ㅋ




세상은 오래살고 볼일..




저작자 표시
신고
Posted by 조띵
좀전에 http://www.ai-contest.com/ 에서 최종 결과를 발표했네요

한국 1등했던것 까지 보고 잠시 손을 땠는데 어느새 다른분이 1등을.ㅎㅎ

막판되니 사람들이 더 많이 몰려 126등까지 밀려나고..

한번더 삘받아서 업뎃을 했어야 하는데 못내 아쉽군요.






저작자 표시
신고
Posted by 조띵
최근 윈도우7 으로 갈아타면서 썬더버드 속도가 부쩍 느려진것을 느꼈다.

메일을 읽이위해 한번 클릭하면 메일 바디가 나오는데까지 3~5초 정도..

filemon으로 모니터를 해보니 메일을 읽을때 마다 매번 system32 폴더를 풀스켄하고 있다..뭥미??

알수없는 이유에 좌절하고 보내기를 몇일..


아욱룩으로 갈아타야지 라는 마음은 점점커지는 가운데

문뜩 플러그인을 보았다.

특별히 설치된 플러그인은 없었고.. 그나마 대부분 사용안함으로 내가 체크를 해두었다.


특이한건 선더버드 플러그인 목록에 adobe reader, client keeper, softforum xecureweb 등등 썬더버드와는 관련없는 것들이 많이 있긴했다. 대부분의 것들은 은행 사이트 들락날락하면서 원치않게 설치된 것들..


속는셈 치고 해당 프로그램을 모두 삭제하고 했는데

이거 왠걸..속도 완전 빨라짐.



어이없어하며 빠른 속도를 느끼고 있을때 문득.. 이거 또 은행 들어가면 느려지겠네.. 라는 생각이 들었다.

주로가는 은행은.. 새마을금고, 국민은행, 외환은행, 우리은행 정도인데



그러다 오늘.. 또다시 읽기 속도가 느려졌다.. 매번 할때마다 프로그램을 지울 수도 없고 다른 방법이 없을까 하다가....



썬더버드 > 도구 > 설정 > 고급 > 일반 > 설정 편집 에서
   plugin.scan.plid.all 이라는 항목을 false로 바꿔졌더니 

은행 들락날락할때 깔리는 보안 프로그램을 굳이(?) 삭제하지 않아도 속도는 다시 빨라졌다.





저작자 표시
신고
Posted by 조띵
원문

The sum of the primes below 10 is 2 + 3 + 5 + 7 = 17.

Find the sum of all the primes below two million.

번역

10보다 작은 소수의 합은 2 + 3 + 5 + 7 = 17 이다.

2백만보다 작은 모든 소수의 합을 구하라.




내맘대로 해설 : 소수목록을 가지고 있고 각 숫자들별로 소수임을 판독하려 했으나...매우 느린 속도로 좌절하고...
배열 200만개 만들고 소수를 발견할때 마다 배열에 set을 해두어 검색하는 방식으로 했다 메모리는 많이 차지하게 되지만 속도만큼은 월등하다.
메모리가 염려되는 것을 대비하여 비트연산(--v)으로도 구현해보았으나 속도는 살짝 저하되었다...
아래에서 주석부분이 비트연산으로 계산하는 방식..


void func()

 char *DataList=NULL;
 int Sum=0;

 
 DataList = new char[2000000];
 memset(DataList, 0x00, 2000000);


 for (int i=3; i<2000000 ; i+=2)
 {
  //if (DataList[i/8] & (1<<(i%8))) continue;
  if (DataList[i]) continue;
 
  for (int n=0; n<2000000; n+=i)
  {
   //DataList[n/8] |= 1<<(n%8);
   DataList[n]=true;
  }

  Sum+=i;
 }
 printf("Value = %d\n", Sum);

 delete [] DataList;

}

저작자 표시
신고
Posted by 조띵

원문

A Pythagorean triplet is a set of three natural numbers, a < b < c, for which,

a2 + b2 = c2

For example, 32 + 42 = 9 + 16 = 25 = 52.

There exists exactly one Pythagorean triplet for which a + b + c = 1000.

Find the product abc.

[편집]번역

피타고라스 수는 a < b < c 이고 다음을 만족하는 3개의 자연수의 쌍입니다.

a2 + b2 = c2

예를 들어 32 + 42 = 9 + 16 = 25 = 52 입니다.

a + b + c = 1000 인 피타고라스 수는 딱 하나가 있습니다.

곱 a*b*c는 얼마인가요



내맘대로 해설 :
피타고라스 수의 정의상 a가 짝수면 b는 홀수다.

a < b < c
a < b < 1000 - a - b
2a+b < a + 2b < 1000

c의 값은 a,b를 가지고 구할수 있기 때문에 for 루프는 2개만 있으면 된다.



void func()
{
int va=0;
for (int a=1; a<1000; a++)
{
va=a*a;  //반복사용하는 값인 미리계산
for (int b=a+1; b<1000; b+=2)  //a와 b는 서로소 이기때문에 *2씩 증가할 수 있다.
{
if (2*a+b>=1000) break;  // 2a+b < 1000  이 조건문으로 불필요한 루프는 타지 않게 함
if (a+2*b>=1000) break;  // a+2b < 1000  이 조건문으로 불필요한 루프는 타지 않게 함
int c = (1000-a-b);
if (va+b*b == c*c)
{
printf("a[%d], b[%d], c[%d] \n",a,b,c) ;
return;
}
}
}
}










저작자 표시
신고
Posted by 조띵

1000자리 수에서 가장 큰 연속한 자릿수 5개의 곱은 얼마인가요?


Find the greatest product of five consecutive digits in the 1000-digit number.


내맘대로 해설:
 번역이 애매모호해서 원문을 보니 이해가 되었다. 주어진 1000자리 수 중에서 연속한 5개 숫자의 곱 중 가장 큰 값은?

문제를 보고 처응 떠오른 아이디어는 순차적으로 계산하되 다음으로 넘어갈때 처음 숫자를 나누고 다음 숫자를 곱하면 되겠다 했는데... 
중간에 0이라는 놈 때문에 그렇게 할순 없었고...
 
결국 순차적으로 계산하고 대신 0을 만날경우 바로 0 다음부터 계산하는 루틴을 넣었다. 워낙 미비한거라.. 실제 속도에 큰영향을 끼치진 못할듯 하다.






void func()
{
char Numbers[]="73167176531330624919225119674426574742355349194934\
96983520312774506326239578318016984801869478851843\
85861560789112949495459501737958331952853208805511\
12540698747158523863050715693290963295227443043557\
66896648950445244523161731856403098711121722383113\
62229893423380308135336276614282806444486645238749\
30358907296290491560440772390713810515859307960866\
70172427121883998797908792274921901699720888093776\
65727333001053367881220235421809751254540594752243\
52584907711670556013604839586446706324415722155397\
53697817977846174064955149290862569321978468622482\
83972241375657056057490261407972968652414535100474\
82166370484403199890008895243450658541227588666881\
16427171479924442928230863465674813919123162824586\
17866458359124566529476545682848912883142607690042\
24219022671055626321111109370544217506941658960408\
07198403850962455444362981230987879927244284909188\
84580156166097919133875499200524063689912560717606\
05886116467109405077541002256983155200055935729725\
71636269561882670428252483600823257530420752963450";

int MaxValue=0;
for (int i=0; i<sizeof(Numbers)/sizeof(char); i++)
{
bool FoundZero = false;
int Value=1;
for (int o=i; o<i+5; o++)
{
if (Numbers[o]=='0')
{
FoundZero = true;
i=o;
break;
}
Value *= Numbers[o]-'0';
}
if (FoundZero) continue;

MaxValue = max(MaxValue, Value);
}

printf("MaxValue = %d\n", MaxValue);
}


저작자 표시
신고
Posted by 조띵
소수 중 처음 6개를 나열하면 2, 3, 5, 7, 11, 13 이다. 이 때 6번째 소수는 13이다.

10001번째 소수는 무엇인가?



내맘대로 해설 :
 숫자를 증가시키면서 소수 리스트를 만들고 10001째 소수를 검출해낸다. 당연하지만 딱히 다른방법은 떠오르지 않네..





void func()
{
int Prime[20000]={0};
int PrimeCount=0;

for (int i=2; PrimeCount<=10001 ; i++)
{
int n;
for (n=0; n<PrimeCount; n++)
{
if (i%Prime[n]==0) break;
}
if (n!=PrimeCount) continue;

Prime[PrimeCount++]=i;
}
printf("10001st Prime = %d\n", Prime[10001]);

}
저작자 표시
신고
Posted by 조띵

1부터 10까지의 자연수의 제곱의 합은 아래와 같습니다.

12 + 22 + ... + 102 = 385

1부터 10까지의 자연수의 합의 제곱은 아래와 같습니다.

(1 + 2 + ... + 10)2 = 552 = 3025

1부터 10까지의 자연수의 합의 제곱과 제곱의 합의 차는 3025 - 385 = 2640 입니다.

1부터 100까지의 자연수의 합의 제곱과 제곱의 합의 차는 얼마인가요?




내맘대로 해설:
문제가 너무쉬워 출제 의도가 의심스럽다. 뭔가 더 좋은 방법이 있을것 같지만 이문제는 여기까지




void func()
{
int Multiple = 0;
int Sum = 0;
for (int i=1; i<=10; i++)
{
Multiple += i*i;
Sum+=i;
}
Sum=Sum*Sum;

printf("Multiple=%d\n", Multiple);
printf("Sum=%d\n", Sum);
printf("Difference=%d\n", Sum-Multiple);
}
저작자 표시
신고
Posted by 조띵
2520은 1에서 10까지의 모든 수로 나누어 떨어집니다.

1부터 20까지의 수로 모두 나누어 떨어지는 가장 작은 수는 얼마인가요?





내맘대로 해설:
 답은 1부터 20까지의 최소 공배수를 구하는 것이다.  x와 y 두 수가 있다면 이 수는 
  x= a * x'
  y= a * y'
로 표현 할수 있고 여기서 a는 최대 공약수가 된다. 그렇다면 최소 공배수는 x * y' 이다.


void func()
{
int Value = 20;
for (int i=20; i>=1; i--)
{
for (int o=i-1; o>=1; o--)
{
if (Value%o==0 && (i-1)%o==0)
{
Value=Value*(i-1)/o;
break;
}
}
}

printf("Value=%d\n", Value);
}
저작자 표시
신고
Posted by 조띵

대칭수는 앞으로 읽으나 뒤로 읽으나 같은 수를 말합니다. 2자리 수의 곱으로 표현된 가장 큰 대칭수는 9009 = 91 × 99  입니다.

3자리 수 두개의 곱으로 이루어진 대칭수 중 가장 큰 수는 얼마인가요?



내맘대로 해설 :
 for문 두개로 간단히 해결하였으나... 뭔가 더 빠른 방법이 있을듯 하다..





void func()
{
int x, y;

for (x=999; x>=100; x--)
{
for (y=999; y>=100; y--)
{
int value= x*y;

if (value / 100000 == value%10 && value%100000/10000 == value%100/10 && value%10000/1000 == value%1000/100)
break;
}

if (y!=99) break;
}

printf("x=%d y=%d value=%d\n", x, y, x*y);
}
저작자 표시
신고
Posted by 조띵


티스토리 툴바