본문 바로가기

프로그래밍 기술 노트/Problem Solving

[PS/Clojure] HackerRand - Algorithms - Equal

클로저를 아주 잘 지원해주는 몇안되는 알고리즘 사이트 HackerRank

지인과 함께 알고리즘 공부중이다. 각자 C++/Python/Clojure 로 문제 풀이중.

 

첫문제는 DP 를 사용하는 Equal

알고리즘은 약하기 때문에... 친구의 힌트를 듣고 풀었다.

 

Equal | HackerRank

Calculate minimum number of such operations needed to ensure that every colleague has the same number of chocolates.

www.hackerrank.com

내풀이는 다음과 같다.

 

Lee-WonJun/ProblemSolving

알고리즘 세미나 . Contribute to Lee-WonJun/ProblemSolving development by creating an account on GitHub.

github.com

(def m-m
  (memoize (fn [x]
           (condp = x
             0 0
             1 1
             2 1
             3 2
             4 2
             5 1
             (inc (min (m-m (- x 1) ) (m-m (- x 2)) (m-m (- x 5)) ) )))))

(defn add-and-m [arr add]
    (->> arr
         (map #(+ add %))
         (map m-m)
         (reduce + )))

; Complete the equal function below.
(defn equal [arr]
  (let [m   (apply min arr)
        mi  (map #(- % m) arr)
        x   (add-and-m mi 0) 
        y   (add-and-m mi 1) 
        z   (add-and-m mi 2) ]
    (min x y z )))

 

"1개를 제외하고 나머지에 1씩 더한다" 이것을 "1개만 1을 뺀다" 와 같이 생각하는 것이 포인트..

 

728x90