practivceAlgorithm/programmers

[Programmers][Python] 카카오2020블라인드 가사검색

findTheValue 2021. 9. 5. 01:08

Trie 역방향, 정방향검색, 길이별 검색.

 

class Node:
    def __init__(self):
        self.child = {}
        self.count = 0

class Trie:
    def __init__(self):
        self.root = Node()
    
    def insert(self,word):
        node = self.root

        for char in word:
            if char not in node.child:
                node.child[char] = Node()
            node.count += 1
            node = node.child[char]
        
    def startswitch(self,prefix):
        node = self.root

        for char in prefix:
            if char=='?':
                return node.count
            if char not in node.child:
                return 0
            node = node.child[char]
        return node.count

def solution(words, queries):
    trielength = {i: Trie() for i in range(1,10001)}
    re_trielength = {i: Trie() for i in range(1,10001)}
    answer = []

    for word in words:
        length = len(word)
        trielength[length].insert(word)
        re_trielength[length].insert(word[::-1])
    
    for query in queries:
        length = len(query)
        if query[0] !='?':
            answer.append(trielength[length].startswitch(query))
        else:
            answer.append(re_trielength[length].startswitch(query[::-1]))
    
    return answer