백준 5052(전화번호 목록) python 풀이입니다
Trie 구조
문자열을 Tree 형식으로 만들어 문자열 검색을 하는 구조,
가장 긴 문자열 길이(O(N)) 만큼의 시간이 소요돼서 효율적이다
어떻게 풀이
다음과 같이 문자열을 Tree 형식으로 저장한 후
다시 입력받은 문자열을 돌며 자식 노드 여부를 확인
코드
class Node(object):
def __init__(self) :
self.children = {}
class Trie:
def __init__(self):
self.head = Node()
def insert(self, string):
cur = self.head
for c in string:
if c not in cur.children:
cur.children[c] = Node()
cur = cur.children[c]
def is_prefix(self, string):
cur = self.head
for c in string:
cur = cur.children[c]
if not cur.children:
return False
return True
def solution():
n = int(input())
words = []
trie = Trie()
for _ in range(n):
word = input()
words.append(word)
trie.insert(word)
for w in words:
if trie.is_prefix(w):
return "NO"
return "YES"
t = int(input())
answer = []
for _ in range(t):
answer.append(solution())
for a in answer:
print(a)
참고
https://m.blog.naver.com/cjsencks/221740232900
아이고 코로나 죽겄다..(안죽음)