티스토리 뷰
백준 문제를 풀면서 알게된 Trie 자료구조에 대한 정리
많은 문자열중에서 같은 문자열을 찾을 때 최대길이가 m이라면 n번 시행할때 O(mn)으로 찾을 수 있고,
트라이를 만들 때도 O(mn)으로 만들 수 있게 한다.
#include <iostream>
#include <cstdlib>
#include <string>
#include <cstring>
using namespace std;
struct Trie {
char c;
bool end;
Trie* next[10];
Trie() {
end = false;
memset(next, 0, sizeof(next));
}
~Trie() {
for (int i = 0; i < 10; i++) {
if (next[i]) delete next[i];
}
}
void insert(string s) {
if (s.size() == 0) {
end = true;
} else {
if (next[s[0] - '0'] == NULL) {
next[s[0] - '0'] = new Trie();
}
next[s[0] - '0']->insert(s.substr(1));
}
}
bool isValid(string s) {
if (s.size() == 0) return true;
if (end) return false;
return next[s[0] - '0']->isValid(s.substr(1));
}
};
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
int t;
cin >> t;
while (t--) {
int n;
cin >> n;
Trie* T = new Trie();
string s[10001];
for (int i = 0; i < n; i++) {
cin >> s[i];
T->insert(s[i]);
}
bool isValid = true;
for (int i = 0; i < n; i++) {
if (!T->isValid(s[i])) isValid = false;
}
if (isValid) cout << "YES\n";
else cout << "NO\n";
}
}
'개발 > 알고리즘' 카테고리의 다른 글
Suffix Array 개념 이해 (0) | 2021.01.01 |
---|---|
BOJ 11003 최솟값 찾기 (0) | 2020.10.04 |
golang Fast IO for algorithm (0) | 2020.05.07 |
Bit Masking (비트 마스킹) (0) | 2019.07.19 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- RVO
- it's called a vrpit
- 우리는 vr핏이라고 부릅니다
- hole-punching
- chrome-extension
- Visual Studio
- ad skip
- 카카오
- Reciprocal n-body Collision Avoidance
- Quest2
- print shared_ptr class member variable
- cockroach db
- shared_from_this
- SuffixArray
- 코어 남기기
- set value
- 면접
- 에러 위치 찾기
- boost
- 영상 픽셀화 하기
- Golang
- 클래스 맴버 변수 출력하기
- vr핏
- mysql
- red underline
- 잘못된 빨간줄
- vrpit
- Obstacle Avoidance
- 봄날에 스케치
- C++
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함