끄적끄적 코딩
article thumbnail


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

검색 태그