생성일: 2023년 08월 28일
수정일: 2023년 08월 28일
수정일: 2023년 08월 28일
4clojure - Pascal’s Triangle (97)
문제
(= (__ 1) [1])
(= (map __ (range 1 6))
[ [1]
[1 1]
[1 2 1]
[1 3 3 1]
[1 4 6 4 1]])
(= (__ 11)
[1 10 45 120 210 252 210 120 45 10 1])
풀이
(fn pascaltriangle [n]
(if (= n 1) [1]
(into [] (concat [1] (map #(apply + %) (partition 2 1 (pascaltriangle (- n 1)))) [1]))))
partition이 중요한 역할을 한다. partition으로 +를 할 항목들을 미리 나눠주기 때문이다. 그리고 concat으로 양쪽에 [1] [1]을 포함해주는 기능으로 사용하여 이 문제를 풀 수 있었다.
풀이2
그리고 into를 사용하지 않고도 계산식이 통과된다는 것을 알았다.
(defn pascaltriangle [n]
(if (= n 1) [1]
(concat [1] (map #(apply + %) (partition 2 1 (pascaltriangle (- n 1)))) [1])))
다시 문제를 봐서 그런지는 잘 모르겠지만 2번째 테스트에 대해서 생소하게 느껴졌다. 근데 결국에는 저런 모양으로 결과가 나와야하는 것이 아니라 한줄로 표시가 되어야 한다는 것을 깨닫게 되었다.
(map pascaltriangle (range 1 6))
;; ([1] (1 1) (1 2 1) (1 3 3 1) (1 4 6 4 1))