-
[Algorithm] 백준 5052 전화번호 목록 - C++, 트라이쾌락없는 책임 (공부)/알고리즘 문제풀이 2023. 10. 7. 19:44반응형
#include <iostream> #include <vector> #include <string> #include <algorithm> using namespace std; struct Trie { bool bIsTerminal; Trie* Children[10]; Trie() : bIsTerminal(false), Children() {} ~Trie() { delete [] Children; } void Insert(const string& InputNumber) { Trie* CurTrie = this; for(int i = 0; i < InputNumber.size(); i++) { if(CurTrie->Children[InputNumber[i] - '0'] == nullptr) { CurTrie->Children[InputNumber[i] - '0'] = new Trie(); } CurTrie = CurTrie->Children[InputNumber[i] - '0']; if(i == InputNumber.size() - 1) { CurTrie->bIsTerminal = true; } } } bool IsTherePrefix(const string& InputNumber) { Trie* CurTrie = this; for(int i = 0; i < InputNumber.size(); i++) { if(CurTrie->Children[InputNumber[i] - '0'] != nullptr) { CurTrie = CurTrie->Children[InputNumber[i] - '0']; if(CurTrie->bIsTerminal) { return true; } } else { return false; } } return false; } }; int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); int TestCaseNum, PhoneNumberCount; cin >> TestCaseNum; while (TestCaseNum--) { cin >> PhoneNumberCount; vector<string> NumberList(PhoneNumberCount); for(int i = 0; i < PhoneNumberCount; i++) { cin >> NumberList[i]; } sort(NumberList.begin(), NumberList.end()); Trie* NumberTrie = new Trie(); bool bNotConsistency = true; for(auto PhoneNumber : NumberList) { if(NumberTrie->IsTherePrefix(PhoneNumber)) { bNotConsistency = false; break; } NumberTrie->Insert(PhoneNumber); } if(bNotConsistency) { cout << "YES\n"; } else { cout << "NO\n"; } delete NumberTrie; } }
시간적 여유가 생겨 새 알고리즘을 공부한 결과입니다. 트라이라는 자료구조를 처음 알게 되었기에 다른 자료들을 많이 참고하면서 풀이를 했습니다.
반응형'쾌락없는 책임 (공부) > 알고리즘 문제풀이' 카테고리의 다른 글
[Algorithm] 백준 5582 공통 부분 문자열 - C++, LCS, DP (1) 2023.06.11 [Algorithm] 프로그래머스 미로 탈출 - C++, BFS (0) 2023.02.20 [Algorithm] 프로그래머스 야간 전술보행 - C++ (0) 2022.11.18 [Algorithm] 프로그래머스 호텔 방 배정 - C++, unordered_map (1) 2022.11.12 [Algorithm] 프로그래머스 부대복귀 - C++, BFS (0) 2022.11.11