Skip to content

Commit 12b63ca

Browse files
committed
add comments for word dictionary
1 parent a1559c7 commit 12b63ca

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

β€Ždesign-add-and-search-words-data-structure/radiantchoi.swiftβ€Ž

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
1+
// 단어 검색을 μœ„ν•œ 자료ꡬ쑰: Trie
12
class 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+
// 각각의 트라이 λ…Έλ“œ
5669
class 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

Comments
Β (0)