순간을 성실히, 화려함보단 꾸준함을

[ boj : 5052 ] 전화번호 목록 본문

알고리즘,SQL/백준,BOJ

[ boj : 5052 ] 전화번호 목록

폭발토끼 2021. 7. 3. 19:41

https://www.acmicpc.net/problem/5052

 

5052번: 전화번호 목록

첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가

www.acmicpc.net

문제 : 일관성이 있으면 YES 아니면 NO를 구해라

해설 : 문자열 문제인데 이런 문제를 트라이라는 알고리즘을 사용해서 풀 수 있다는데 나는 모르겠다....(아직 공부 안함 ㅠ)
그냥 문자 하나씩 비교하며 일관성에 문제 없으면 set에 넣어두고 매번 검색해 주었다.

#include<bits/stdc++.h>

using namespace std;
using ll = long long;

string arr[100000];

void solve();

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);

    int t;
    cin >> t;

    while (t--)solve();
}
void solve()
{
    int n;
    set<string> s;
    string ans = "YES";

    cin >> n;

    for (int i = 0; i < n; i++)cin >> arr[i];
    sort(arr, arr + n);
    for (int i = 0; i < n; i++) {
        int len = arr[i].length();
        string str = arr[i],y;
        for (int i = 0; i < len; i++) {
            y += str[i];
            if (s.find(y) != s.end()) {
                ans = "NO";
                goto here;
            }
        }
        s.insert(arr[i]);
    }
here:;
    cout << ans << "\n";
}