일상용/연습장
[leetcode] 3-13회차
alpakaka
2025. 6. 10. 15:21
trie 문제다.
문제는 내가 trie 자료구조가 기억이 안난다.
기억을 살릴 겸 블로그를 살펴본다.
https://velog.io/@kimdukbae/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-%ED%8A%B8%EB%9D%BC%EC%9D%B4-Trie
[자료구조] 트라이 (Trie)
트라이(Trie)는 문자열을 저장하고 효율적으로 탐색하기 위한 트리 형태의 자료구조이다.우리가 검색할 때 볼 수 있는 자동완성 기능, 사전 검색 등 문자열을 탐색하는데 특화되어있는 자료구조
velog.io
https://codingnojam.tistory.com/40
[Algorithm] Trie를 Java로 구현해보자!
안녕하세요 coding-knowjam입니다. 오늘은 검색할 때 O(N)의 시간 복잡도를 가지는 Trie를 구현해보겠습니다. 1. Trie란? Trie는 일반적인 Tree자료구조와 같은 모양이지만 저장하는 값이 다른 형태입니다.
codingnojam.tistory.com
이곳저곳 찾아보니 구현방법이 달랐는데 언어 차이인걸까?
java 나 c 언어의 경우에는 endofWord 나 finish 등의 bool 변수로 확인하는데 반해
python 은 리프노드에 word 를 저장하는 게 달랐다.
같은 이유로 구현한거니 상관 없을 것 같다.
class Trie(object):
def __init__(self):
self.root={}
def insert(self, word):
"""
:type word: str
:rtype: None
"""
cur=self.root
for letter in word:
if letter not in cur:
cur[letter]={}
cur=cur[letter]
cur['*']=''
def search(self, word):
"""
:type word: str
:rtype: bool
"""
cur=self.root
for letter in word:
if letter not in cur:
return False
cur=cur[letter]
return '*' in cur
def startsWith(self, prefix):
"""
:type prefix: str
:rtype: bool
"""
cur = self.root
for letter in prefix:
if letter not in cur:
return False
cur = cur[letter]
return True
# Your Trie object will be instantiated and called as such:
# obj = Trie()
# obj.insert(word)
# param_2 = obj.search(word)
# param_3 = obj.startsWith(prefix)
class TrieNode:
def __init__(self):
self.children = {}
self.end_node = False
class WordDictionary(object):
def __init__(self):
self.root= TrieNode()
def addWord(self, word):
"""
:type word: str
:rtype: None
"""
cur = self.root
for letter in word:
cur = cur.children.setdefault(letter, TrieNode())
cur.end_node = True
def search(self, word):
"""
:type word: str
:rtype: bool
"""
def dfs(node, i):
if i == len(word): return node.end_node
if word[i] == ".":
for child in node.children:
if dfs(node.children[child], i+1): return True
if word[i] in node.children:
return dfs(node.children[word[i]], i+1)
return False
return dfs(self.root, 0)
# Your WordDictionary object will be instantiated and called as such:
# obj = WordDictionary()
# obj.addWord(word)
# param_2 = obj.search(word)
기능 하나 추가하는건데 어려웠다.
열심히 공부하자.