1+ // λ¨μ΄ κ²μμ μν μλ£κ΅¬μ‘°: Trie
12class WordDictionary {
3+ // λ£¨νΈ λ
Έλ
24 let root : TrieNode
35
46 init ( ) {
57 root = TrieNode ( )
68 }
79
810 func addWord( _ word: String ) {
11+ // Array({String}) initializerμ λ°ν νμ
μ [Character]
912 let spread = Array ( word)
1013 var node = root
1114
15+ // ν κΈμμ© μννλ©° μμ λ
Έλ μΆκ° νΉμ λ°©λ¬Έ
1216 for letter in spread {
1317 if let child = node. children [ letter] {
1418 node = child
@@ -19,6 +23,7 @@ class WordDictionary {
1923 }
2024 }
2125
26+ // μΆκ°νκ³ μ νλ λ¨μ΄μ λ§μ§λ§ κΈμμ ν΄λΉνλ λ
ΈλκΉμ§ μννμΌλ―λ‘, ν΄λΉ λ
Έλλ₯Ό μ’
λ£ λ
Έλλ‘ μ€μ
2227 node. isTerminating = true
2328 }
2429
@@ -27,15 +32,20 @@ class WordDictionary {
2732 }
2833
2934 private func traverse( _ node: TrieNode , _ quote: [ Character ] , _ starting: Int ) -> Bool {
35+ // Trieμ 0λ²μ§Έ μΈλ±μ€λ μ무 κΈμλ λνλ΄μ§ μμΌλ―λ‘, 첫 λ²μ§Έ κΈμκ° κ³§ κΉμ΄ 1μ λ
Έλμ μ μ₯
36+ // λ°λΌμ startingμ΄ quote.countμ κ°λ€λ©΄, λͺ¨λ κΈμλ₯Ό 체ν¬ν κ²μ΄λ―λ‘ μ’
λ£ λ
ΈλμΈμ§ νμΈν μ μμ
37+ // quote.countκΉμ§ incrementingνκ³ λ°λ‘ 체ν¬νλ―λ‘, μ΄ μ΄μ μ«μκ° μ»€μ§ μ μμ
3038 if starting == quote. count {
3139 return node. isTerminating
3240 }
3341
3442 let letter = quote [ starting]
3543
44+ // νμ¬ κΈμκ° μμΌλμΉ΄λ λ¬ΈμμΈμ§ μλμ§ μ²΄ν¬νκ³ , DFS λ°©μμ μν
3645 if letter == " . " {
3746 var result = false
3847
48+ // μμΌλμΉ΄λ λ¬ΈμλΌλ©΄ λͺ¨λ μμ λ
Έλλ₯Ό μννμ¬ κ²°κ³Ό λ°ν
3949 for key in node. children. keys {
4050 if let child = node. children [ key] {
4151 result = result || traverse ( child, quote, starting + 1 )
@@ -44,17 +54,22 @@ class WordDictionary {
4454
4555 return result
4656 } else {
57+ // μμΌλμΉ΄λ λ¬Έμκ° μλλΌλ©΄, μΌλ¨ μμ λ
Έλμ ν¬ν¨λμ΄μλμ§ νμΈ
4758 guard let child = node. children [ letter] else {
4859 return false
4960 }
5061
62+ // ν¬ν¨λμ΄μλ€λ©΄, λ€μ κΈμλ₯Ό μννμ¬ κ²°κ³Ό λ°ν
5163 return traverse ( child, quote, starting + 1 )
5264 }
5365 }
5466}
5567
68+ // κ°κ°μ νΈλΌμ΄ λ
Έλ
5669class TrieNode {
70+ // νμ¬ κΈμμμ λλλ λ¨μ΄κ° μλκ°?
5771 var isTerminating : Bool
72+ // μμ λ
Έλ - Character ννλ‘ λ€μ κΈμλ₯Ό μ μ₯νλ―λ‘, λ
Έλμλ λ³λλ‘ κΈμλ₯Ό μ μ₯νμ§ μλλ€
5873 var children : [ Character : TrieNode ]
5974
6075 init ( isTerminating: Bool = false , children: [ Character : TrieNode ] = [ : ] ) {
0 commit comments