QuizWit

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ QuizWit ] in KIDS
글 쓴 이(By): Sue (eXponent)
날 짜 (Date): 2006년 9월 20일 수요일 오후 04시 33분 29초
제 목(Title): Re: 오늘 신문에 난 문제 하나.. f(n)..



언제때 신문인지 모르겠는데, 우연히 오늘 신문을 보니
Google 입사 시험 문제라고 하면서, 아래 문제가 있더군요.
한번 풀어보세요.
f(n) 은 자연수 n에 대해서 1부터 n 사이의 1의 갯수로 정의되어 있다.
즉 f(1) = 1, f(2) = 1, f(13) = 6 등등
f(n) = n 이 되는 최초의 수는 1이다. f(n) = n 이 되는 두번째
자연수는 얼마인가?

--
 1자리수에서의 합 (1~9)       1               누적 f(9) = 1
 2자리수에서의 합 (10~99)     1*9 + 10        누적 f(99) = 20
 3자리수에서의 합 (100~999)   20 * 9 + 100    누적 f(999) = 300
 4자리수에서의 합 (1000~9999) 300 * 9 + 1000  누적 f(9999) = 4000
 5자리수에서의 합       4000 *9 + 10000       누적 f(99999) = 50000
 6자리수에서의 합      50000 *9 + 100000      누적 f(999999) = 600000
 
 그런데, 맨 앞자리 수가 1일때는 값이 계속 늘어나므로
 f(1) = 1
 f(19) = f(9)*2 + 10 = 12, 
 f(199) = f(99)*2  + 100 = 140   
 f(1999) = f(999)*2 + 1000 = 1600
 f(19999) = f(9999)*2 + 10000 = 18000
 f(199999) = f(99999)*2 + 100000 = 200000

 그러므로 
 199981에서 199990 까지의 수는 f(n) = n
 
 %%첫자리가 1이 아닌 경우에는 f(10^k - 1) < 10^k - 1이므로(k < 6)
 검사하지 않아도 됨.


; Capture & Consider
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.