• toc {:toc}

문제

그룹 단어를 찾는 문제이다.

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다.

EX) aaabbbccc → 각 문자가 모두 연속해서 나타난다.

abc → 모두 연속해서 나타난다.

abac → b와 c는 문제가 없지만 a의 경우 연속해서 나타나는 것이 아니라 떨어져서 나타나기 때문에 그룹 단어가 아니다.

풀이

  1. 블록으로 묶이려면 떨어져 있는 경우가 없어야 한다.
  2. 이는 알파벳이 변경되는 지점 이후 부터 이전 알파벳이 뒷 자리에 존재해서는 안된다.
  3. EX) aaabbbccc일 경우 a → b 로 변경되는 지점부터 a가 뒷쪽 인덱스에 존재하지 않으면 된다.
#include <iostream>
#include <string>
 
using namespace std;
 
bool isGroup(string s);
 
int main()
{
	int num, result=0;
	string str;
	cin >> num;
	for(int i=0; i<num; i++)
	{
		cin >> str;
		if(isGroup(str))
			result++;
	}
	cout << result << endl;	
	
	return 0;
}
 
bool isGroup(string s)
{
	char bAlpa;
	for(int i=0; i<s.size()-1; i++)
	{
		if(s[i]!=s[i+1])	// 알파벳이 바뀌는 시점 aabb 이면 1-2인덱스 사이
		{
			bAlpa = s[i];
			for(int j = i+1; j<s.size(); j++)		// 뒷 알파벳 조사 후 판단
			{
				if(bAlpa == s[j])
					return false;
			}
		}
		
	}
	return true;
}