Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- Roads and Libraries
- programmers
- 격파르타 합격후기
- Recursion: Davis' Staircase
- hackerrank
- BFS: Shortest Reach in a Graph
- 코딩테스트
- 백준
- 격파르타 장점
- 피보나치 함수
- 파이썬
- 구슬탈출2
- 머신러닝
- Common Child
- 프로그래머스
- [sqld]자격증합격
- 해커랭크
- Max Array Sum
- 야근지수
- Find the nearest clone
- Algorithm
- Special String Again
- 매칭점수
- Reverse Shuffle Merge
- Interview Preparation Kit
- DFS: Connected Cell in a Grid
- 격파르타 후기
- 알고리즘
- python
- candies
Archives
- Today
- Total
Archive
[programmers] Level4. 자동완성 본문
https://programmers.co.kr/learn/courses/30/lessons/17685
풀이
- Trie 자료구조를 활용
- 먼저 단어를 Trie에 넣음. 그리고 Trie에서 단어를 찾을 때 각 단어마다 입력해야 할 문자 수를 어떻게 찾을지 생각해야 함.
- 기본이 되는 Node를 만들 때, data, children 외에 below_word_counts를 추가해 해당 단어 밑에 단어가 몇 개가 남았는지 개수를 저장.
- 처음 insert할 때 below_word_counts 변수를 항상 1씩 증가시켜 Node 밑에 몇 개의 단어가 있는지 알 수 있게 함.
- 입력해야 할 문자 수를 찾을 때 두 가지 조건을 생각함.
- 먼저 depth 변수를 추가해 children node로 나아갈 때마다 1씩 증가. 타이핑한 문자 개수로 볼 수 있음.
- 첫 번째 조건으로 len(word) == depth일 경우 depth를 리턴. 입력된 문자를 다 타이핑한 경우로 볼 수 있고, 'go', 'gone'과 같이 짧은 단어가 긴 단어에 포함될 경우, 해당 조건식이 실행됨
- 두 번째 조건으로 현재 Node 밑에 남아있는 단어가 1일 경우에 depth를 리턴. 현재 노드까지 타이핑한 경우, 유일한 단어가 1개 남아있기 때문에 자동완성이 적용될 수 있음. depth를 리턴.
class Node:
def __init__(self, data=None):
self.data = data
self.children = {}
self.below_word_counts = 0
class Trie(object):
def __init__(self, words):
self.header = Node()
for w in words:
self.insert(w)
def insert(self, word):
cur = self.header
for w in word:
if w not in cur.children:
cur.children[w] = Node(w)
cur.below_word_counts += 1
cur = cur.children[w]
cur.below_word_counts += 1
def count_typing_words(self, word):
cur = self.header
depth = 0
for w in word:
cur = cur.children[w]
depth += 1
if len(word) == depth:
return depth
if cur.below_word_counts == 1:
return depth
def solution(words):
trie = Trie(words)
answer = 0
for word in words:
answer += trie.count_typing_words(word)
return answer
'공부 > Algorithm' 카테고리의 다른 글
[Hackrrank] [Medium] Count Triplets (0) | 2020.08.23 |
---|---|
[Hackerrank] [Medium] Sherlock and Anagrams (0) | 2020.08.22 |
[programmers] Level4. 도둑질 (0) | 2020.08.16 |
[Hackerrank] [Medium] New Year Chaos (0) | 2020.08.12 |
[Hackerrank] [Hard] Maximum Subarray Sum (0) | 2020.08.11 |
Comments