Skip to content

Commit a72fed6

Browse files
Create taurus09318976.py
1 parent f7078c0 commit a72fed6

File tree

1 file changed

+78
-0
lines changed

1 file changed

+78
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
'''
2+
์ด ๋ฌธ์ œ๋Š” ๋ฌธ์ž์—ด์„ ํšจ์œจ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ๊ฒ€์ƒ‰ํ•˜๋Š” ํŠธ๋ฆฌ ๊ตฌ์กฐ์ž„ (์˜ˆ : ์ž๋™์™„์„ฑ ๊ธฐ๋Šฅ)
3+
์ฃผ์š” ๊ธฐ๋Šฅ : ๋‹จ์–ด ์ถ”๊ฐ€(insert), ๋‹จ์–ด ๊ฒ€์ƒ‰(search), ์ ‘๋‘์‚ฌ ํ™•์ธ(startsWith)
4+
5+
Example 1.์˜ ๋‹จ๊ณ„๋ณ„ ๋™์ž‘
6+
7+
๋ฉ”์„œ๋“œ ํ˜ธ์ถœ ์ˆœ์„œ ๋ฆฌ์ŠคํŠธ ์ธ์ž ๋ฆฌ์ŠคํŠธ ์‹ค์ œ ํ˜ธ์ถœ ์˜ˆ์‹œ
8+
"Trie" [] Trie() -> ๋นˆ ํŠธ๋ผ์ด๋ฅผ ๋งŒ๋“ฌ. ๋ฃจํŠธ ๋…ธ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ์•„๋ฌด ๋ฌธ์ž๋„ ์ €์žฅ๋˜์–ด ์žˆ์ง€ ์•Š์Œ
9+
"insert" ["apple"] insert("apple") -> 'a' ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ  ์ด๋™
10+
-> 'p' ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ  ์ด๋™
11+
-> ๋˜ 'p' ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ  ์ด๋™
12+
-> 'l' ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ  ์ด๋™
13+
-> 'e' ๋…ธ๋“œ๊ฐ€ ์—†์œผ๋ฉด ์ƒˆ๋กœ ๋งŒ๋“ค๊ณ  ์ด๋™
14+
-> ๋งˆ์ง€๋ง‰ 'e' ๋…ธ๋“œ์— is_end = True ํ‘œ์‹œ (์—ฌ๊ธฐ๊นŒ์ง€๊ฐ€ "apple"์ด๋ผ๋Š” ๋‹จ์–ด์ž„์„ ๋œปํ•จ)
15+
16+
"search" ["apple"] search("apple") -> ๋ฃจํŠธ๋ถ€ํ„ฐ 'a' โ†’ 'p' โ†’ 'p' โ†’ 'l' โ†’ 'e' ๋…ธ๋“œ๊นŒ์ง€ ์ฐจ๋ก€๋กœ ์ด๋™
17+
-> ๋งˆ์ง€๋ง‰ 'e' ๋…ธ๋“œ๊ฐ€ is_end = True ์ด๋ฏ€๋กœ True ๋ฐ˜ํ™˜
18+
19+
"search" ["app"] search("app") -> ๋ฃจํŠธ๋ถ€ํ„ฐ 'a' โ†’ 'p' โ†’ 'p' ๋…ธ๋“œ๊นŒ์ง€ ์ด๋™
20+
-> 'p' ๋…ธ๋“œ์˜ is_end ๊ฐ’์ด False (์•„์ง "app"์ด๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์™„์„ฑ๋˜์ง€ ์•Š์•˜์Œ)
21+
-> ๋”ฐ๋ผ์„œ False ๋ฐ˜ํ™˜
22+
"startsWith" ["app"] startsWith("app") -> ๋ฃจํŠธ๋ถ€ํ„ฐ 'a' โ†’ 'p' โ†’ 'p' ๋…ธ๋“œ๊นŒ์ง€ ์ด๋™
23+
-> ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜๋ฏ€๋กœ True ๋ฐ˜ํ™˜ (์ ‘๋‘์‚ฌ๋Š” ์กด์žฌํ•จ)
24+
25+
"insert" ["app"] insert("app") -> ๋ฃจํŠธ๋ถ€ํ„ฐ 'a' โ†’ 'p' โ†’ 'p' ๋…ธ๋“œ๊นŒ์ง€ ์ด๋ฏธ ์กด์žฌํ•˜๋ฏ€๋กœ ์ƒˆ ๋…ธ๋“œ ์ƒ์„ฑ ์•ˆ ํ•จ
26+
-> ๋งˆ์ง€๋ง‰ 'p' ๋…ธ๋“œ์— is_end = True ํ‘œ์‹œ (์ด์ œ "app"๋„ ์™„์„ฑ๋œ ๋‹จ์–ด์ž„)
27+
-> "app"์€ ์ฒ˜์Œ์— is_end=False์˜€๊ธฐ ๋•Œ๋ฌธ์— ๊ฒ€์ƒ‰ ์‹œ False๊ฐ€ ๋‚˜์™”๊ณ , ์‚ฝ์ž… ํ›„ True๊ฐ€ ๋จ
28+
29+
"search" ["app"] search("app") -> ๋ฃจํŠธ๋ถ€ํ„ฐ 'a' โ†’ 'p' โ†’ 'p' ๋…ธ๋“œ๊นŒ์ง€ ์ด๋™
30+
-> ๋งˆ์ง€๋ง‰ 'p' ๋…ธ๋“œ๊ฐ€ is_end = True ์ด๋ฏ€๋กœ True ๋ฐ˜ํ™˜
31+
32+
<ํŠธ๋ผ์ด ๊ตฌ์กฐ>
33+
34+
๋ฃจํŠธ
35+
โ””โ”€ 'a'
36+
โ””โ”€ 'p'
37+
โ””โ”€ 'p' (is_end=True) โ† "app"
38+
โ””โ”€ 'l'
39+
โ””โ”€ 'e' (is_end=True) โ† "apple"
40+
41+
42+
'''
43+
44+
class TrieNode: # ํŠธ๋ผ์ด์˜ ๊ฐ ๋…ธ๋“œ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ํด๋ž˜์Šค
45+
def __init__(self):
46+
self.children = {} # ํ˜„์žฌ ๋…ธ๋“œ์˜ ์ž์‹๋“ค์„ {๋ฌธ์ž:๋…ธ๋“œ} ํ˜•ํƒœ๋กœ ์ €์žฅ
47+
self.is_end = False # ํ˜„์žฌ ๋…ธ๋“œ๊ฐ€ ๋‹จ์–ด์˜ ๋์ธ์ง€ ํ‘œ์‹œ(๊ธฐ๋ณธ๊ฐ’ False)
48+
49+
class Trie:
50+
def __init__(self):
51+
self.root = TrieNode() # ํŠธ๋ผ์ด์˜ ์‹œ์ž‘์ ์ธ ๋นˆ ๋ฃจํŠธ ๋…ธ๋“œ ์ƒ์„ฑ
52+
53+
def insert(self, word: str) -> None:
54+
node = self.root # ๋ฃจํŠธ ๋…ธ๋“œ์—์„œ ์‹œ์ž‘
55+
for char in word: # ๋‹จ์–ด์˜ ๊ฐ ๋ฌธ์ž๋ฅผ ํ•˜๋‚˜์”ฉ ์ฒ˜๋ฆฌ
56+
if char not in node.children: # ํ˜„์žฌ ๋…ธ๋“œ์˜ ์ž์‹์— ๋ฌธ์ž๊ฐ€ ์—†์œผ๋ฉด
57+
node.children[char] = TrieNode() # ์ƒˆ๋กœ์šด ๋…ธ๋“œ ์ƒ์„ฑ ํ›„ ์ž์‹์— ์ถ”๊ฐ€
58+
node = node.children[char] # ๋‹ค์Œ ๋ฌธ์ž ๋…ธ๋“œ๋กœ ์ด๋™
59+
node.is_end = True # ๋‹จ์–ด์˜ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž ๋…ธ๋“œ์— ๋ ํ‘œ์‹œ
60+
61+
def search(self, word: str) -> bool:
62+
node = self.root
63+
for char in word: # ๋‹จ์–ด์˜ ๊ฐ ๋ฌธ์ž๋ฅผ ๋”ฐ๋ผ ์ด๋™
64+
if char not in node.children: # ๋ฌธ์ž๊ฐ€ ์—†์œผ๋ฉด ๋‹จ์–ด ์กด์žฌ X -> False
65+
return False
66+
node = node.children[char]
67+
return node.is_end # ๋ชจ๋“  ๋ฌธ์ž๋ฅผ ํ†ต๊ณผํ–ˆ๋‹ค๋ฉด, ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๊ฐ€ ๋‹จ์–ด ๋์ธ์ง€ ํ™•์ธ
68+
69+
70+
def startsWith(self, prefix: str) -> bool:
71+
node = self.root
72+
for char in prefix: # ์ ‘๋‘์‚ฌ์˜ ๊ฐ ๋ฌธ์ž๋ฅผ ๋”ฐ๋ผ ์ด๋™
73+
if char not in node.children: # ๋ฌธ์ž ์—†์œผ๋ฉด ์ ‘๋‘์‚ฌ ์กด์žฌ X -> False
74+
return False # ๋ชจ๋“  ๋ฌธ์ž๊ฐ€ ์กด์žฌ -> ์ ‘๋‘์‚ฌ O
75+
node = node.children[char]
76+
return True # 7. ์ ‘๋‘์‚ฌ ์กด์žฌ
77+
78+

0 commit comments

Comments
ย (0)