딴분들은 부끄러우니 보지 말아주세요..ㅠ_ㅠ


(defn open-doors [doors n]
  (if (zero? n)
    doors
    (recur
     (for [d doors
           :let [i (first d)
                 s (last d)]]
       (if (zero? (mod i n)) [i (not s)] [i s])) (dec n))))

(defn doors [n]
  (let [doors (map vector (range 1 (inc n)) (repeat n false))]
    (map first (filter (comp true? last)
                       (open-doors doors n)))))

(doors 100)


걍 내 아는 한도 내에서 짠거임. 걍 문제 알고리즘 돌직구.

나 걍 clojure 안하는게 좋음? 걍 이대로 자바게이나 C++게이로 사는게 흉이 보기에 100배 나음?


뭐 특히 좀 더러운 냄새 나는 부분에 대해서 어떻게 고치면 좀 더 clojure 스러운지 지도편달 부탁드리겠음.

근데 확실히 빠르게 코딩은 가능한 것 같다. REPL이랑 같이 쓱쓱하니..


근데 이거랑은 논외로 리습방식이 첨이라 그런진 모르겠는데 예를 들어 for루프를 타는 뭔가를 작성할때

예전에는 for ... range 이런 형태로 top-down적으로 짜고 있음. 근데 clojure는 우선 range로 리스트를 만들고 이걸 for로 한다는 생각으로 bottom-up으로 작성함. 이게 맞는 방식임? 아무래도 repl때문에 더 그런 것 같은데.


미리 감사드림!


음..12시에 일 안돼서 잠깐 살펴봐서 밑에 부분 좀 수정함. 이것까지 포함하면 대충 12분정도 걸린듯염.