문자가 연속적으로 나타나는 경우에 그 단어를 그룹 단어라한다.
ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고,
kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만,
aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다.
단어 N개를 입력으로 받아 그룹 단어의 개수를 출력하는 프로그램을 작성하시오.
처음에 문제를 접근할 때는 반복문을 기본으로 문자열을 전부 돌면서 배열에 문자를 하나씩 저장해주고, 만약 그 문자와 일치하는 경우에는 반복 문자가 아니라는 방식으로 코딩을 진행하였다. 그러다보니 단순히 aab만 되어도 2번째 반복문을 돌 시기에 이미 a가 나와 잘못된 방식으로 생각을 하였다. 단순하게 abca 같은 경우에 마지막 a만을 캐치할 수 있도록 코딩을 한 것이다. 다시 천천히 생각을 하며 조건을 추가해주어야할 필요성을 느꼈고, 조건문에 만약 해당 i번째에 i-1에서 이미 해당 문자가 반복된 경우(앞전에 이미 나왔던 문자라 해당 문자가 단순 반복을 하고 있는 경우에)를 추가하여 보완을 해주었다. 해당 경우에는 break를 통해 반복문을 깨주고 On이라는 변수를 통해서 받은 문자열이 정상이 아님을 표시해주었다.
실버 문제들도 차근히 풀어나가고있다. 하지만 항상 무언가 조금씩 놓치면서 코딩을 해서 실행하고 결과를 확인하고 고쳐야하는 경우가 너무 많다. 자잘한 실수를 줄일 수 있도록 노력하자!
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main()
{
char Str[100];
char Collection[100];
int N = 0;
int Count = 0;
int On = 0;
scanf("%d", &N);
for (int i = 0; i < N; i++)
{
scanf("%s", &Str);
On = 0;
for (int j = 0; j < strlen(Str); j++)
{
Collection[j] = Str[j];
for (int k = 0; k < j; k++)
{
if (Str[j] == Collection[k] && (Str[j-1] != Collection[k]))
{
On = 1;
break;
}
}
}
if(On == 0)
Count++;
}
printf("%d", Count);
}