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;
}
}
'백준문제풀이' 카테고리의 다른 글
백준 문제 1753번 최단경로 문제풀이 c++ (0) | 2022.03.22 |
---|---|
백준 문제 14425번 문자열 집합 문제풀이 c++ (0) | 2022.03.22 |
백준 문제 2812번 크게 만들기 문제풀이 c++ (0) | 2022.03.22 |
백준 문제 16496번 큰 수 만들기 문제풀이 c++ (0) | 2022.03.20 |
백준 문제 17144번 미세먼지 안녕! 문제풀이 c++ (0) | 2022.03.20 |