백준 문제풀이/실버5

백준 1316번 - 그룹 단어 체커

void_melody 2021. 11. 20. 18:31

https://www.acmicpc.net/problem/1316

 

1316번: 그룹 단어 체커

그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때

www.acmicpc.net

사고과정)

abca 가 있다고 하면, a의 경우 아까 나왔는데 마지막에 또 나와버려서 그룹단어가 아님

그걸 활용해, 알파벳 수를 담는 배열을 만들고, 한글자씩 옆에랑 서로 비교하면서 다르면 글자수를 더하고

그러다가 글자수가 2 이상이면 중복되었다는 소리이므로 그룹단어가 아님.

 

문자열을 입력받고 (str[i] != str[i+1]) 이런 식으로 비교를 할텐데, 그렇게 되면 마지막 글자 하나는 비교가 안됨.

그래서 그냥 임시 문자열을 하나 만들어서 abc면 abcc 이렇게 한 글자를 임시로 더 더해줘서 다 비교되게함.

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main()
{
	int N;
	cin >> N;

	int result = N;
	for (int i = 0; i < N; i++)
	{
		int alphabet[26] = { 0, };
		string input;
		cin >> input;

		string temp = input + input.back();
		size_t length = temp.length();
		for (int j = 0; j < length; j++)
		{
			if (temp[j] != temp[j + 1])
				alphabet[temp[j] - 'a']++;
		}
		for (int i = 0; i < 26; i++)
		{
			if (alphabet[i] > 1)
			{
				result--;
				break;
			}
		}
	}

	cout << result;
	
	return 0;
}