PS

BOJ 5052 : 전화번호 목록

lickelon 2024. 2. 12. 22:40
  • 문제 링크 : 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;
}

풀이

트라이 기본문제이다.

정렬해서 푸는 방법도 있다.

'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