생성일: 2023년 08월 30일
수정일: 2023년 08월 30일
수정일: 2023년 08월 30일
4clojure - Least Common Multiple (100)
문제
(== (__ 2 3) 6)
(== (__ 5 3 7) 105)
(== (__ 1/3 2/5) 2)
(== (__ 3/4 1/6) 3/2)
(== (__ 7 5/7 2 3/5) 210)
풀이
(fn [& args]
(letfn [(gcd [x y]
(let [a (max x y)
b (min x y)
m (mod a b)]
(if (zero? m) b
(recur b m))))
(lcm [a b]
(/ (* a b) (gcd a b)))]
(reduce lcm args)))
이미 풀어져 있었는데 검색을 해보니 답이 있는 문제 였다. 최소공배수를 구하는 문제이고, 최소 공배수는 두수의 곱 / 두수의 최대공약수 로 계산한다는 것을 풀이를 보고 알게 되었다. 그리고 ==의 의미는 숫자에 대한 등호라는 것을 문서를 보고 알게 되었다.
(= 0.0 0)
;; false
(== 0.0 0)
;; true
풀이를 보니까 아래와 같은 답이 있는데 분석 해보고 싶어졌다.
(fn [G & n] (reduce #(/ (* % %2) (G % %2)) n))
(fn g [a b] (if (= b 0) a (g b (rem a b))))
어떻게 2개의 함수로 동작하는 해답을 만들어냈는지 의문이 든다.