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

4clojure - Pascal’s Triangle (97)

  1. 문제
  2. 풀이
  3. 풀이2

문제

(= (__ 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))
Tags: 4clojure