n개의 수가 주어졌을 때
어떤 수가 다른 수의 앞부분에 있으면 NO를 출력합니다.
그렇지 않으면 YES를 출력합니다.
수를 전부 vector에 입력한 후
sort함수로 정렬을 합니다.
그리고 현재 수와 다음 수 (i, i+1)의 문자 길이를 비교합니다.
i가 i+1번째 수보다 길이가 크거나 같으면 i+1는 앞부분에 i번째 수가 있을 수 없으므로 continue 해줍니다.
그렇지 않을 경우 i를 i+1의 크기만큼 잘라서 같은지 비교를 해서 같으면 NO를 출력합니다.
#include <iostream>
#include <string>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
int main(int argc, char *argv[])
{
int ts;
int n;
int flag;
int current;
int next;
char s[10010];
vector<string> v;
scanf("%d", &ts);
while (ts--) {
flag = 0;
scanf("%d", &n);
for (int i = 0; i < n; ++i) {
scanf("%s", &s);
v.push_back(s);
}
sort(v.begin(), v.end());
for (int i = 0; i < n - 1; ++i) {
current = v[i].length();
next = v[i + 1].length();
if (current >= next) {
continue;
}
if (v[i + 1].substr(0, current) == v[i]) {
printf("NO\n");
flag = 1;
break;
}
}
if (flag == 0) {
printf("YES\n");
}
v.clear();
}
return 0;
}
'알고리즘' 카테고리의 다른 글
[C++] 백준 14490번 백대열 (0) | 2019.09.17 |
---|---|
[C++] 백준 2959번 거북이 (0) | 2019.09.17 |
[C++] 백준 11652번 카드 (0) | 2019.09.16 |
[C++] 백준 3047번 ABC (0) | 2019.09.16 |
[C++] 백준 10825번 국영수 (0) | 2019.09.16 |