algorism – two sum

two sum 문제는 합의 수에 사용되었던 두 개의 수를 구하는 문제이다.

예) 합의 수는 22이고, 숫자열이 [3 8 14 7 2  5 10 1] 이라고 가정했을때,

결과값은 [1,2]가 된다. 여기서 1,2의 값은 앞의 숫자 배열의 인덱스이다.

(defn two-sum [t coll]
  (let [ns (apply merge (map-indexed (fn [idx v]
                                       {v idx}) coll))]
    (loop [l ns
           f (first l)]
      (when (not (seq? f))
        (let [r (- t (first f))]
          (if (nil? (l r))
            (recur (into {} (rest l)) (first (rest l)))
            [(second f) (l r)]))))))

(two-sum 22 [3 8 14 7 2  5 10 1]) => [1 2]

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다