생성일: 2023년 08월 30일
수정일: 2023년 08월 30일

4clojure - Least Common Multiple (100)

  1. 문제
  2. 풀이

문제

(== (__ 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개의 함수로 동작하는 해답을 만들어냈는지 의문이 든다.

Tags: 4clojure