Blog | Tag | Local | Media | Guest | Login  RSS

이거 심심할 때 쯤 되면 이런 문제가 하나씩 떡떡 나타나네요.
덕분에 버닝 중...

문제는 http://synap.tistory.com/entry/문제를-푸시면-기념품을-드립니다
여기에 있고

피보나치 수에 대한 문제입니다. 피보나치 수는 아래와 같이 정의됩니다.
f(1) = 1
f(2) = 2
f(3) = f(1) + f(2) = 1 + 2 = 3
f(4) = f(2) + f(3) = 2 + 3 = 5
f(5) = f(3) + f(4) = 3 + 5 = 8
...
f(n) = f(n-2) + f(n-1), n>=3

a와 b라는 두수가 주어져 있을때 두수사이에는 몇개의 피보나치 수가 있을까요?
예를 들어 10과 100 사이에는 총 5개(13, 21, 34, 55, 89)의 피보나치 수가 있습니다.

12345678999과 99987654321 사이에도 몇개의 피보나치 수가 있습니다.
이 구간내의 모든 피보나치수를 더한 값이 기념품을 받을 수 있는 열쇠입니다.


정답을 아시면 아래 URL로 접속하세요.

http://{정답}.synap.co.kr

이런 내용입니다. 딱 보니 구글 스타일입니다. 초기 구글 리쿠르팅을 따라해보겠다는...?
여튼 문제가 재미있어서 푸는 중입니다. 현재 저거 풀고, 그 다음거 풀고, 세번째 것에 와 있습니다.
두번째는 조금 더 고생 많이 한다는 ㅠ.ㅠ

그나저나 이 문제에... 구간별로 피보나치 수의 갯수가 일정하다는게 재밌군요.
수의 재미가 좀 있습니다 ^^ 뭐 문제푸는데는 그다지... 도움이 안됩니다. ^^: Just for Fun
게다가 피보나치이니까...재귀로 했다가 좌절하고...급 반전해서 완전히 다른 방향으로 풀었습니다.
저도 이런 방법이 있는 줄은 오늘 첨 알았다는...

현재 첨 문제는 Ruby로 풀었는데 적당히 공백 좀 넣어서 20줄 내로 나왔고, 두번째는 python 으로 풀어서 20줄 정도 나왔습니다. 첨에는 ruby 로 도전했다가 속도 문제로 좌절...python으로 하니 좀 낫군요.

저기서 정답 공개하지 말아달라고 해서 저도 공개안했습니다. 요청 시에 소스 공개는 할 수 있지만...
보시면...허접 소스라는 ㅋㅋㅋ ㅎㅎㅎ ^^:

ps. 3번째 통과, 이제 4번쨰군요. 마지막...
ps2. 일반화...좌절이라는...머리가 안 따라주는건지...이제까지 했던 자체가 원래 일반화가 안되는 로직인건지...
       머리만 아프다는...걍 새로 짤까...ㅠ.ㅠ
이올린에 북마크하기(0) 이올린에 추천하기(0)

 태그 : 
이 글의 관련글(Trackback) 주소 :: http://snaiper.tistory.com/trackback/255
Tracked from 괴짜 프로그래머의 일상사~@@ | 2007/09/10 11:54 | DEL
기탁님 블로그에 오늘 재미난 내용이 올라왔더군요. 다름 아닌 사이냅소프트에서 개발자들을 상대로 하는 이벤트 였습니다. 그런데 기념품이 먼지를 모르겠습니다. 마지막까지 가르쳐주지 않더군요. 갈수록 코딩을 더 마니 요구하는 문제들이 나옵니다. 사실 2,3,4단계는 전부 같은 문제입니다. 문제 푸는 분들의 삽질 시간을 덜어 드리기 위해서 간단한 소개와 힌트만 담아보았습니다.일 단계: 피보나치피보나치 수열에 관한 문제입니다.문제는 여기서 보실 수 있습니다...
ㄹㄹㄹ| 2007/09/10 02:28 | PERMALINK | EDIT/DEL | REPLY
이건 뭐 그냥 수학 문제군요
점화식만 구하면 해가 바로 튀어나오는..
BlogIcon snaiper | 2007/09/10 12:38 | PERMALINK | EDIT/DEL
네 수학 문제죠...단...해는 나오는데, 손으로 더하기는 난감하다는 ^^:
object| 2007/09/10 11:48 | PERMALINK | EDIT/DEL | REPLY
아.. 이거 코딩해서 푸는건가요? 난 또 손으로 풀어야하는 건 줄 알고 당황해했네요.. 재귀로 하면 좀 애로사항이 꽃필 것 같고.. memoization 같은 기법이 좋을 것 같습니다.

구간별로 (3자리수, 4자리수 이런 거 말씀하시는거죠?) 일정한 것은 피보나치 수열의 일반항이 {a^n - (1-a)^n}/sqrt(5) 꼴인데요. a는 여기서 x^2-x-1=0의 근이구요. 그런데 n이 좀 커지면 (1-a)^n이 작은 수가 되어서 무시해버리고 양변에 log10을 취하면 대략.. 피보나치 수의 자리수 = n*(1보다 작은수) 정도 관계식이 얻어지기 때문에 그런 결과가 나오는 것으로 설명할 수 있습니다. 그런데 일반항을 알고 있으니 좀 시시하게 풀리는군요. 엑셀로 저는 쓱싹 -_-;;;
BlogIcon codewiz | 2007/09/10 11:56 | PERMALINK | EDIT/DEL
object님 그럼 a, b 두 수가 주어졌을 때 그 사이에 몇 개의 피보나치 숫자가 있는지도 알 수 있는 건가요?? 저는 문제가 그건줄알고 한참 고민했는데 결국 못찾았습니다. ㅎㅎ
BlogIcon snaiper | 2007/09/10 12:40 | PERMALINK | EDIT/DEL
엑셀로...^^: ...
저는 그 계산도 하기 싫어서
다 코딩했다는...

처음에는 문제를 다르게 이해해서...
답이 이상하게 크다 했습니다 ^^:
BlogIcon snaiper | 2007/09/10 13:12 | PERMALINK | EDIT/DEL
글고 구간 얘기는...자리수 얘기는 아니고..피보나치 수의 갯수 얘기였습니다 ^^. 일정 구간 단위로 숫자가 일정하더군요. 저도 첨에는 그 문제인 줄 알고..풀다가 ㅎㅎㅎ
BlogIcon object| 2007/09/10 14:08 | PERMALINK | EDIT/DEL | REPLY
마치 방정식의 해와 같이 구간 사이에 존재하는 숫자를 뚝딱 알아내기는 힘들 것 같습니다. 원식 그대로 로그를 씌우면 이게 비선형스럽게 변해서..
BlogIcon snaiper | 2007/09/10 16:09 | PERMALINK | EDIT/DEL
흠...비선형이라..어느 정도 일정하다가 변하는 모양이군요. 도데체 얼마나 크게 해야? ㅠ.ㅠ
Name
Password
Homepage
비밀글 (Secret)