생성일: 2019년 10월 31일
수정일: 2023년 10월 10일

4clojure - Flatten a Sequence (28)

  1. 문제
  2. 풀이

문제

(= (__ '((1 2) 3 [4 [5 6]])) '(1 2 3 4 5 6))

(= (__ ["a" ["b"] "c"]) '("a" "b" "c"))

(= (__ '((((:a))))) '(:a))

제한: flatten

풀이

(fn myflatten [x]
  (cond (not (sequential? x)) (list x)
        (empty? x) nil
        :else (concat (myflatten (first x)) (myflatten (rest x)))))

번호 순서 대로 과거에 풀었던 문제들을 다시 정리를 하면서 분석을 하고 있다. 중첩collection을 없애고 하나의 collection으로 만드는 문제인데 concat과 sequential?로 문제를 풀었다. 기본적으로 concat은 collection에 대해서 합쳐지는 것 같아서 (list)로 만들어 반환을 해주고 있다. 이때 당시에 이 문제를 풀때 위와 같은 형태의 recursive아니면 답이 없다고 생각을 했는데 clojure라면 더 나은 답이 있으리라 판단이 든다.

Tags: 4clojure Today I Learn