728x90
//5052 전화번호 목록
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
ios_base :: sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int t;
cin >> t;
while(t--){
int n;
cin >> n;
string phone[n];
for(int i = 0 ; i < n ; i++){
cin >> phone[i];
}
sort(phone, phone + n);
string compare = phone[0];
bool consistent = true;
for(int i = 1 ; i < n ; i++){
bool check;
if(compare.length() > phone[i].length()){
check = (compare.substr(0, phone[i].length()) == phone[i]);
}else{
check = (compare == phone[i].substr(0, compare.length()));
}
if(check){
cout << "NO\n";
consistent = false;
break;
}
compare = phone[i];
}
if(consistent){
cout << "YES\n";
}
}
return 0;
}
나는 이문제가 왜 골드 4인지 모르겠다 트라이 안쓰고 그냥 정렬해도 풀리는데..
같은 문자열 문제 중에 1141 접두사 실버2 문제가 있는데 이게 더 어려웠던 거 같다.
그냥 한 번 정렬해준 다음, 앞에서부터 두개씩 비교해가며
한쪽이 남은 한쪽의 접두사가 되는지 체크하는 check라는 bool 변수를 썼고,
check가 true일 때 일관성을 의미하는 변수 consistent를 false로 바꿔줬다.
'알고리즘' 카테고리의 다른 글
[C++/백준 2110] 공유기 설치 (0) | 2022.09.14 |
---|---|
[C++/백준 17928] 오큰수 (0) | 2022.08.29 |
[백준/C++] 톱니바퀴 (0) | 2022.03.25 |
[C++/백준 21608] 상어 초등학교 (0) | 2022.03.25 |
[C++/백준 14502] 연구소 (0) | 2022.03.25 |