- 문제 링크 : boj.kr/5052
- 난이도 : G4
- 태그 : 트라이
5052번: 전화번호 목록
첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가
www.acmicpc.net
코드
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define INF 0x7FFFFFFF
using namespace std;
using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;
class Trie {
bool leaf;
Trie* node[10];
public:
Trie() {
leaf = false;
for(auto &u : node) {
u = NULL;
}
}
~Trie() {
for(auto u : node) {
delete u;
}
}
bool insert(string s) {
if(s.length() == 0) {
leaf = true;
for(auto u : node) {
if(u) return true;
}
return false;
}
int idx = s[0] - '0';
if(node[idx] == NULL) {
node[idx] = new Trie();
}
return leaf || node[idx]->insert(s.substr(1));
}
};
int main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int T;
cin >> T;
while(T--) {
int n;
cin >> n;
vector<string> arr(n);
for(auto &u : arr) cin >> u;
bool ans = false;
Trie root;
for(auto u : arr) {
ans |= root.insert(u);
}
cout << (ans ? "NO" : "YES") << "\n";
}
return 0;
}
풀이
트라이 기본문제이다.
정렬해서 푸는 방법도 있다.
728x90
'PS' 카테고리의 다른 글
BOJ 1051 : 숫자 정사각형 (0) | 2024.02.14 |
---|---|
BOJ 11724 : 연결 요소의 개수 (0) | 2024.02.13 |
BOJ 20044 : Project Teams (0) | 2024.02.11 |
BOJ 20920 : 영단어 암기는 괴로워 (1) | 2024.02.10 |
BOJ 2986 : 파스칼 (0) | 2024.02.09 |