2009. 4. 27.

사이냅 소프트 입사문제 Triple

주어진 양수의 리스트에서 다음과 같은 조건을 만족하는 조합의 수를 출력하기..

x + y = z

리스트 상의 모든 내역을 조사해서 해당하는 내역에 맞는 값의 조합을 구해내야한다.



(defun findout_triple (lst)
(let ((n (length lst))
(total 0))
(do ((i 0 (+ i 1)))
((eq n i) nil)
(let ((lst-i (nth i lst)))
(do ((j 0 (+ j 1)))
((or (eq n j) (eq i j)) nil)
(let ((lst-j (nth j lst)))
(do ((k 0 (+ k 1)))
((or (eq n k) (eq i k) (eq j k)) nil)
(let ((lst-k (nth k lst)))
(if (or (eq (+ lst-i lst-j) lst-k)
(eq (+ lst-i lst-k) lst-j)
(eq (+ lst-j lst-k) lst-i))
(progn
(format t "~A ~A ~A ~%" lst-i lst-j lst-k)
(setf total (+ total 1))))))))))
total))

조금 헤멨던게 do 문에서 반복의 첨자로 루프가 돌 때, 해당 첨자에 문제가 있을 때까지도 해당식이 평가되기 때문에, 에러가 발생할 수 있다는 것..

지저분하게 풀렸다.. -_-;;;

댓글 없음:

댓글 쓰기