백준 5052번: 전화번호 목록 / C++

2023. 3. 28. 23:12개인공부/코딩테스트

5052번: 전화번호 목록 (acmicpc.net)

 

5052번: 전화번호 목록

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

www.acmicpc.net

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <string>
#include <set>
using namespace std;
 
 
 
int main()
{
    cin.tie(NULL);
    cout.tie(NULL);
    ios::sync_with_stdio(false);
 
    int TestCase;
    cin >> TestCase;
    for (int i = 0; i < TestCase; ++i) {
        set<string> S;
        int n; cin >> n;
        bool IsConst = true;
        for (int j = 0; j < n; ++j) {
            string str;
            cin >> str;
            S.insert(str);
            auto iter = ++S.find(str);
            if (iter != S.end()) {
                string Next = *iter;
                for (int i = 0; i < str.size(); ++i) {
                    if (str[i] != Next[i])
                        break;
                    if (i == str.size() - 1)
                        IsConst = false;
                }
            }
 
            if (IsConst == true) { // 일관성이 없으면 스킵
                while (!str.empty())
                {
                    str.pop_back();
                    if (S.find(str) != S.end())
                        IsConst = false;
                }
            }
 
        }
 
        if (IsConst)
            cout << "YES" << '\n';
        else
            cout << "NO" << '\n';
    }
}
 
cs