[SWEA] 3135. 홍준이의 사전놀이 (C++, 라이브러리 X)
Algorithm 카테고리의 다른 글
Trie 기본문제
풀이
Trie를 구현하고, 각각의 노드에 해당 노드로 시작하는 단어의 개수(cnt)를 저장함.
query함수는 해당 단어를 찾고, cnt를 반환.
해당 단어가 없을 경우 0을 반환
코드 GitHub
struct TrieNode {
int cnt;
TrieNode* next[26];
TrieNode* Alloc() {
cnt = 0;
for(int i = 0; i < 26; i++) next[i] = nullptr;
return this;
}
} nodes[1000000];
int nodeCnt;
TrieNode head;
void init(void) {
nodeCnt = 0;
head.Alloc();
}
void insert(int buffer_size, char *buf) {
TrieNode* node = &head;
for(int i = 0; i < buffer_size; i++) {
int anum = buf[i] - 'a';
if(!node->next[anum]) node->next[anum] = nodes[nodeCnt++].Alloc();
node->cnt++;
node = node->next[anum];
}
node->cnt++;
return;
}
int query(int buffer_size, char *buf) {
TrieNode* node = &head;
for(int i = 0; i < buffer_size; i++) {
int anum = buf[i] - 'a';
if(!node->next[anum]) return 0;
node = node->next[anum];
}
return node->cnt;
}
댓글남기기