Last active
January 2, 2016 16:19
-
-
Save yangwansu/8329834 to your computer and use it in GitHub Desktop.
http://euler.synap.co.kr/prob_detail.php?id=1
10보다 작은 자연수 중에서 3 또는 5의 배수는 3, 5, 6, 9 이고, 이것을 모두 더하면 23입니다.
1000보다 작은 자연수 중에서 3 또는 5의 배수를 모두 더하면 얼마일까요?
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(#(range %1 %2 %1) 3 10) | |
(#(range %1 %2 %1) 5 10) | |
;; 렉시컬 범위의 함수를 이용하고 3 과 5의 배수 리스트를 더한후 유니크한 Set 만 추출 하여 계산 | |
(letfn [(multiful [number limit] | |
(seq (range number limit number)))] | |
(apply + | |
(set (concat (multiful 3 1000) (multiful 5 1000)))) | |
) | |
;; 루프를 돌며 3과 5의 배수만 필터한 목록의 합 | |
(reduce + (filter #(if (= 0 (* (mod % 3) (mod % 5))) %) (range 1000))) | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
만약 3의 배수목록을 구할 수 있는 방법을 구한다.
-> 클로저에서 찾아보니 range 란게 있군.. step 을 이용하여 배수를 구할 수 있군...
3의 배수 목록을 전부 더하는 방법은???
-> apply 를 사용 할 수 있음을 직감? ㅋ
이번에는 요구사항인 3의 배수 목록과 5의 공통된 배수의 합의 경우를 생각해보자.
공통된 배수는 중복해서 더하면 안되기 때문에 두 수의 목록에서 합친후 유니크한 값들만 더해야한다.
유니크 하니 set 이 떠오름 --> 혹시나해서 클로저 사이트에서 확인
앗 그런데 두 결과 목록 어떻게 합치지??? 찾아보니concat 이란게 있었음 ㅋㅋ
concat 으로 합친 목록을 set 을 이용해 유크한 값만 빼오고 apply 를 사용해 목록의 모든 값에 + 연산을 함
참고 url http://clojuredocs.org/quickref/Clojure%20Core