algorithm(c++)
그룹단어 체커 아이디어
2426
2023. 3. 31. 10:01
https://www.acmicpc.net/problem/1316
1316번: 그룹 단어 체커
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때
www.acmicpc.net
위 문제를 풀며 알게 된 아이디어:
1,2 글자 단어는 명백히 그룹단어이므로 if문으로 검사하여 다음 루프로 넘긴다.
bool alpabet[26]을 사용해 해당 알파벳이 이전에 등장한 적이 있는가를 검사한다.
처음 등장이라면 ture 아닐 땐 if문으로 확인하여 그룹단어가 아니라면 cnt를 낮춘다.
출력시 전체 단어 개수에서 그룹단어가 아닌 cnt를 제하여 그룹단어의 수를 나타낸다.
#include <iostream>
using namespace std;
int main(){
short n;
cin >> n;
short cnt = 0;
string s;
for(short i = 0; i < n; i++){
cin >> s;
bool alpabet[26] = {false, };
alpabet[s[0] - 'a'] = true;
if(s.size() == 1 || s.size() == 2) continue;
for(short j = 1; j < s.size(); j++){
if(s[j] != s[j - 1] && alpabet[s[j] - 'a'] == true){
cnt++;
break;
}else{
alpabet[s[j] - 'a'] = true;
}
}
}
cout << n - cnt;
}