DP 를 사용하는 Sherlock and CostConstruct the Array
오랜만에 아무 힌트없이 풀었다 크흠...
(defn exp [x n]
(reduce * (repeat n x)))
(def mod-value (+ 7 (exp 10 9)))
(defn my-mod [x] (mod x mod-value))
(defn tail-count [d-avail d-number-one d-answer acc k n]
(let [avail (my-mod (* k d-avail))
number-one (my-mod (- d-avail d-number-one))
answer (my-mod (- avail number-one))]
(if (= acc n) d-answer
(recur avail number-one answer (inc acc) k n))))
(defn count-dp [n k x]
(let [n-n (- n 2)
n-k (dec k)
n-o (if (= x 1) 1 0)]
(tail-count 1 n-o 1 0 n-k n-n)))
보다 효율적으로 풀기위하여 1~~~X 가 아닌 X~~~1 식으로 생각하면서
이전의 가능한 경우의수 - 이전의 가능한 1의 개수를 빼면 된다.
728x90
'프로그래밍 언어 노트 > Clojure' 카테고리의 다른 글
[Clojure] clojure to xlsx (Excel) (0) | 2020.06.23 |
---|---|
[Clojure] Clojure 웹 드라이버 API (0) | 2020.06.23 |
Clojure로 만든 간단한 PDF 내용 수정 프로그램 (0) | 2020.03.14 |
[Clojure] Clojure 와 Haskell 의 DSL 비교 (0) | 2020.01.24 |
[Clojure] conj 는 왜 list, vector에서 다르게 동작하는가. (0) | 2020.01.09 |