[백준/C++] 1316번 : 그룹 단어 체커 (실버 V)

Eunho Bae·2023년 1월 17일
0

백준

목록 보기
38/40

문제링크


아이디어

내 방식

나는 aabbbaa라는 문자열이 있을때 a부터 차례대로 순회하면서 a~z까지 이 문자열이 이전에 체크가 되었는지 확인할 수 있는 true/false 배열을 하나 두었다. 그리고 a부터 시작하면 다른 문자가 나올때까지 무한루프를 돌게 하였다.
b가 나오면 check[0] = true로 만들고 b도 동일한 방식으로 무한루프를 돌면서 다른 문자가 나올때까지 순회한다. 다시 a가 나오면 무한루프를 돌기 전에 if문으로 true가 되어있는지 체크를 하는데 만약 true라면 그대로 빠져나와 다음 문자열을 체크한다.

다른 방식

코드 보러가기

더 간단하게 할 수 있는 방법이 있었다.
aabbbaa라는 문자열이 있을때
aa
aab
aabbb
aabbba
aabbbaa
이런식으로 돌면서 현재 보고 있는 문자와 바로 앞에 있는 문자가 다르고 && 현재 만약 aabbbaa에서 6번째에 있는 a를 보고 있다고 했을때 1번째부터 순회하면서 만약 같은 문자가 존재한다면 bbb를 칸막이로 하는 a 그룹이 두 개로 분리되어 있다는 뜻이 된다.


제출 코드

#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main()
{
	int n;
	vector<string> v;
	string str;
	cin >> n;
	int count = 0;

	for (int i = 0; i < n; i++)
	{
		cin >> str;
		v.push_back(str);
	}

	bool flag = false;

	for (int i = 0; i < n; i++)
	{
		bool check[26] = { false };
		int len = v[i].length(); 

		for (int j = 0; j < len;) 
		{
			char temp = v[i][j];
			flag = false;

			if (check[temp - 'a'] == true)
			{
				flag = true;
				break;
			}
			
			while (j++ < len && temp == v[i][j]);

			check[temp - 'a'] = true;
		}
		if(!flag)
			count++;

	}
	cout << count;
}
profile
개인 공부 정리

0개의 댓글