User Tools

Site Tools


study:algorithms:bruteforce

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
study:algorithms:bruteforce [2013/04/26 15:05]
likerivers12 [문제:]
study:algorithms:bruteforce [2019/02/04 14:26] (current)
Line 289: Line 289:
 ===== [예제: 보글 게임] ===== ===== [예제: 보글 게임] =====
  
 +==== 문제 ====
 +  * 지정된 5x5 크기의 알파벳 격자에서 상하좌우/​대각선으로 인접한 칸들의 글자들을 이어서 단어를 찾는 것이 목표이다.
 +  * 입력: 시작 좌표(행,​열),​ 찾는 문자열
 +
 +=== C++ ===
 <code c++> <code c++>
 // 5x5의 보글 게임 판의 해당 위치에서 주어진 단어가 시작하는지를 반환 // 5x5의 보글 게임 판의 해당 위치에서 주어진 단어가 시작하는지를 반환
Line 312: Line 317:
 } }
 </​code>​ </​code>​
 +
 +=== Clojure ===
 +<code clojure>
 +
 +(def dx [-1, -1, -1,  1,  1,  1,  0,  0])
 +(def dy [-1,  0,  1, -1,  0,  1, -1,  1])
 +
 +(def board [ ['U, 'R, 'L, 'P, 'M]
 +             ​['​X,​ 'P, 'R, 'E, 'T]
 +             ​['​G,​ 'I, 'A, 'E, 'T]
 +             ​['​X,​ 'T, 'N, 'Z, 'Y]
 +             ​['​X,​ 'O, 'Q, 'R, 'S]])
 +
 +(defn in-range [y x]
 +  (if (or (< y 0) (< x 0))
 +    false
 +    (if (or (> y 5) (> x 5))
 +      false
 +      true)))
 +
 +(defn has-word [y x word]
 +  (cond (not (in-range y x)) false
 +        (not (= (str (get-in board [y x])) (str (first word)))) false
 +        (= (count word) 1) true
 +        :else
 +         (loop [direction 0]
 +           (if (>= direction 8)
 +             false
 +             (let [ny (+ y (nth dy direction))
 +                   nx (+ x (nth dx direction))]
 +               (if (has-word ny nx (apply str (rest word)))
 +                 true
 +                 ​(recur (inc direction))))))))
 +
 +(has-word 1 1 "​PRETTY"​)
 +
 +</​code>​
 +
  
study/algorithms/bruteforce.txt · Last modified: 2019/02/04 14:26 (external edit)