class 노드 {
constructor(){
this.children = {}
this.count = 0
}
}
class 트라이 {
constructor(){
this.root = new 노드()
}
insertData(word){
let current = this.root
current.count += 1
for (const s of word) {
let child = current.children[s]
if(!child) {
child = new 노드()
current.children[s] = child
}
child.count += 1
current = child
}
}
search(query){
let current = this.root
for (const q of query) {
if(q === '?') {
return current.count
} else if (!current.children[q]){
return 0;
}
current = current.children[q]
}
}
}
function solution(words, queries){
answer = []
const 트라이배열 = Array(11)
const 트라이역배열 = Array(11)
for (const word of words) {
const 단어길이 = word.length
const 트라이1 = 트라이배열[단어길이] ? 트라이배열[단어길이] : new 트라이()
const 트라이2 = 트라이역배열[단어길이] ? 트라이역배열[단어길이] : new 트라이()
트라이1.insertData(word)
트라이2.insertData([...word].reverse().join(''))
트라이배열[단어길이] = 트라이1
트라이역배열[단어길이] = 트라이2
}
for (const query of queries) {
if (!트라이배열[query.length]){
answer.push(0)
continue
}
let count
if(query[0] !== '?'){
count = 트라이배열[query.length].search(query)
} else {
count = 트라이역배열[query.length].search([...query].reverse().join(''))
}
answer.push(count)
}
return answer
}
카카오 2020년 공채문제로 프로그래머스 lv.4 문제로 트라이 자료구조로 풀이되었다.
프로그래머스 문제 링크
🕵️♀️ Trie 란?
문자열을 저장하고 효율적으로 탐색하기 위한 트리 형태의 자료구조이다.
💬 아직 해당 풀이를 이해하지 못 했고 많이 부족하다고 느꼈다.
현재 제코베 JS 100제 풀이 91번까지 진행한 상태로 JS 100제에서도 다시 복습해야될 문제들이 산더미다. 제코베 JS 100제 복습과 동시에 프로그래머스 문제를 하나씩 풀어 lv.3 을 이해할 정도가 되었을 때 다시 볼 예정이다.
6월부터 CS 기초에 대한 학습과 JS 복습을 위해 면접 질문에 대한 답을 스스로 정리하며 블로그에 작성하고 있었다.
다만, 최근에는 React 학습으로 면접 질문에 대한 블로깅이 정체되어 있는 상태다.😂
오늘 수업 중 진행한 면접 질문 또한 기존에 블로깅하던 비공개 게시물에 추가하여 정리하고 어느정도 정리가 완료되면 공개할 예정이다.