본문 바로가기

Language/C++

[C++][백준 1316][문자열] 그룹 단어 체커 - 컴도리돌이

728x90

문제

  • ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.
  • 첫째 줄에 단어의 개수 N이 들어온다. N은 100보다 작거나 같은 자연수이다. 둘째 줄부터 N개의 줄에 단어가 들어온다. 단어는 알파벳 소문자로만 되어있고 중복되지 않으며, 길이는 최대 100이다.
  • 첫째 줄에 그룹 단어의 개수를 출력한다.

소스 코드

  • 알파벳 위치 값을 갖는 arr와 입력 값을 string으로 받았다. 그리고 단어에 대한 flag를 설정해줬다.

  • 입력받은 string의 첫 번째 index부터 확인하여, 해당 알파벳에 대한 위치 값을 증가시킨다.

  • 다음 알파벳을 확인할 때 만약 중복된 알파벳 값이며, 반복된 알파벳 값이 아니면 flag를 증가시킨다.

  • flag가 1이 아니면 그룹 단어를 증가시킨다.

#include<iostream>
#include<string>

using namespace std;

int main(void)
{
    int N= 0;
    cin >> N;
    int group_word = 0;

    for(int i=0; i<N; i++)
    {
        int arr[26] = {0,}, flag = 0;
        string word;
        cin >> word;

        for(int j=0; j<word.length(); j++)
        {
            arr[(int)word[j]-97]++;

            if(arr[(int)word[j]-97] > 1 && j>=1 && word[j] != word[j-1])
            {
                flag = 1;
                break;
            }
        }
        if(flag == 0)
        {
            group_word++;
        }
    }
    cout << group_word;
    return 0;
}