백준 algorithm
백준 1316 - 그룹 단어 체커
cosmohoo
2020. 6. 4. 01:37
반응형
=> 단순한 구현 문제입니다.
=> string을 사용하고 bool형 array를 사용하여 구현할 수 있습니다.
-
알파벳을 담을 bool형 array를 생성합니다.
-
현재의 단어의 글자를 탐색하며 처음 나온 알파벳인지, 나왔던 알파벳인지를 확인합니다.
-
처음 나온 알파벳일 경우, 해당 알파벳을 방문했다고 표시해줍니다.
-
처음 나온 알파벳이 아닐 경우, 이전 알파벳과 같은 알파벳인지, 같지 않은지 확인합니다.
-
같지 않을 경우 그룹 단어에 해당이 안됩니다.
-
해당하는 경우에 okay라는 bool형 변수를 true로 바꿔주고, 해당 변수를 통해 단어의 개수를개수를 세는 cnt의 개수를 올릴지 말지 정합니다.
-
모든 순서가 끝나면 방문하였던 알파벳 arr를 초기화시켜주고, okay 변수 또한 초기화 시켜줍니다.
=> 저는 이와 같은 알고리즘으로 문제를 해결했습니다.
<code>
#include <iostream>
#include <algorithm>
#include <string>
int arr[10];
using namespace std;
bool alphabet[27];
void reset()
{
for(int i=0; i<27; i++)
{
alphabet[i]=false;
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
int N;
cin >> N;
string arr[101];
string str;
for(int i=0; i< N; i++)
{
cin >> str;
arr[i] = str;
}
int cnt =0;
bool okay;
for(int i=0; i<N; i++)
{
string tmp = arr[i];
int len = tmp.length();
for(int j=0; j<len; j++)
{
if(!alphabet[tmp[j]-97]) // 한번도 나오지 않은 경우
{
alphabet[tmp[j]-97]=true; // 나온것 확인
}
else //나왔던 알파벳인 경우
{
if(tmp[j] ==tmp[j-1] )//이전것이 연속인 경우
{
continue;
}
else//이전것과 다른 경우
{
okay = true; // 집합의 단어가 아님
break;
}
}
}
if(okay != true) //적합한 단어라면
{
cnt++;
okay =false;
}
reset();
okay = false;
}
cout << cnt <<'\n';
return 0;
}
**훨씬 간단한 방법이 있을 것이라 생각되지만, 생각나는 대로 구현해본 코드입니다.
**질문 환영합니다.
반응형