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;
}