클로저를 아주 잘 지원해주는 몇안되는 알고리즘 사이트 HackerRank
지인과 함께 알고리즘 공부중이다. 각자 C++/Python/Clojure 로 문제 풀이중.
첫문제는 DP 를 사용하는 Equal
알고리즘은 약하기 때문에... 친구의 힌트를 듣고 풀었다.
내풀이는 다음과 같다.
(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
'프로그래밍 기술 노트 > Problem Solving' 카테고리의 다른 글
[PS/C#] HackerRand - Algorithms - The Maximum Subarray (0) | 2020.11.03 |
---|---|
[PS/Clojure] HackerRand - Algorithms - Queen's Attack (0) | 2020.06.10 |
[PS/Clojure] HackerRand - Algorithms - Absolute Permutation (0) | 2020.06.08 |
[PS/Clojure] HackerRand - Algorithms - Forming a Magic Square (0) | 2020.06.05 |
[PS/Clojure] HackerRand - Algorithms - Sherlock and Cost (0) | 2020.06.05 |