백준5052 전화번호 목록 작성일 2019-09-11 | In ICPC 문제 링크 http://icpc.me/5052 문제 출처 2007 NCPC A번 사용 알고리즘 Trie 풀이 트라이 기초 문제입니다. 전화번호를 각각 트라이에 넣어주면서 다른 전화번호의 prefix인지, 혹은 다른 전화번호의 prefix가 되는지 확인해주면 됩니다. 전체 코드 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051#include <bits/stdc++.h> using namespace std; struct Node{ bool valid; int child[10]; Node(){ for(int i=0; i<10; i++) child[i] = -1; valid = 0; } }; vector<Node> trie; bool flag = 0; void insert(string &s, int idx, int node){ if(idx == s.size()){ trie[node].valid = 1; return; } int now = s[idx] - '0'; if(trie[node].valid) flag = 1; if(idx == s.size()-1 && trie[node].child[now] != -1) flag = 1; if(trie[node].child[now] == -1){ trie[node].child[now] = trie.size(); trie.push_back(Node()); } insert(s, idx+1, trie[node].child[now]); } void init(){ trie.clear(); trie.push_back(Node()); flag = 0; } void solve(){ init(); int n; cin >> n; for(int i=0; i<n; i++){ string s; cin >> s; insert(s, 0, 0); } if(flag) cout << "NO\n"; else cout << "YES\n"; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); int t; cin >> t; while(t--) solve(); }