차 해봐았다. 뇌가 활성화 덜 되서 그런지, 표현이 마음에 안들었는데,
간단 벤치마크 해보니 마음에 드는 표현이 존나게 약 7만배 느려.
이런건 그냥 머리속에 틀에 밖힌, 서로 속도차가 없는 몇가지 방법이 있는데, 대체 왜 느릴까?
원래 목적은 재쳐두고, 왜 느린지 파보기 시작.
아주 예전(?)과 지금과 다른 점을 먼저 생각해 봄
- 오라클 JDK에서 오픈JDK로 바꿈
- 버전 8...
버전 8 이라... 회사껀 11로 업그레이드 했는데... 일단 JDK업그레이드 후 벤치마크 다시 한번.
변화가 없음 ㅋ
와 ㅅㅂ 이거 뭐지? 암튼 모닝 뇌 워밍업 준비운동이 좀 옆길로 샛네 샛어 ㅋ
(defn diamond [n]
{:pre [(<= 1 n) (odd? n)] }
(let [n-half (quot n 2)]
(for [n-outer-spc (concat (range n-half -1 -1) (range 1 (inc n-half)))
:let [outer-spc (repeat n-outer-spc \\space)
n-inner-spc (- n n-outer-spc 2 n-outer-spc)]]
(apply str `(~@outer-spc
\\*
~@(repeat n-inner-spc \\space)
~@(when (pos? n-inner-spc)
[\\*]))))))
(defn print-diamond! [n]
(doseq [line (diamond n)]
(println line)))
생소한데 이게 무슨 문법입니까 행님
이게 Clojure 인데, 그냥 보면 다른 프로그래밍 언어로도 뭘 어떻게 해야 할지 보이지 않냐? 물론, 세부 디테일은 다를 수 있지만, 알고리즘이나 구현 아이디어는 같을 듯.