백준문제풀이
백준 문제 5052번 전화번호 목록 문제풀이 c++
노가다 김씨
2022. 3. 22. 14:03
https://www.acmicpc.net/problem/5052
5052번: 전화번호 목록
첫째 줄에 테스트 케이스의 개수 t가 주어진다. (1 ≤ t ≤ 50) 각 테스트 케이스의 첫째 줄에는 전화번호의 수 n이 주어진다. (1 ≤ n ≤ 10000) 다음 n개의 줄에는 목록에 포함되어 있는 전화번호가
www.acmicpc.net
문제해석
이 문제를 문자열로 생각해서 풀었다.
먼저 문자열로 입력을 받고 정렬한다음 어떤 번호의 부분 번호가 전화번호로 하나라도있으면 NO를 출력하게 하였고 하나도 없는경우 YES를 출력하였다.
정렬을 했기 때문에 문자열의 앞대가리가 같은 놈들이 길이가 짧은놈부터 순차적으로 있을건데 짧은놈이 다음 놈의 부분 문자열인가를 판단하면 끝이다.
코드
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
vector <string> v;
int main(){
cout.tie(NULL);
cin.tie(NULL);
ios_base::sync_with_stdio(false);
int n,t;
cin>>t;
while(t--)
{
cin>>n;
v.clear();
for(int i=0; i<n; i++)
{
string s;
cin>>s;
v.push_back(s);
}
sort(v.begin(),v.end());
for(int i=0; i<v.size()-1; i++)
{
if(v[i].size()<v[i+1].size())
{
if(v[i]==v[i+1].substr(0,v[i].size()))
{
cout<<"NO\n";
goto Label;
}
}
}
cout<<"YES\n";
Label: continue;
}
}