문제에서 말하는 연속된 알파벳 배열은 다음과 같다.
1. abc 한번에 나오는 것
2. aaabbcc 여러번 나오더라도 마지막 알파벳이 앞의 것과 같고 뒤에는 같은 것이 나오지 않는 것.
즉, aabbccsa는 연속된 알파벳 배열이 아니다.
1.입력
문장의 개수 n을 입력받는다. (0<n<=100)
2.출력
연속된 배열로 이뤄진 문장의 수를 출력한다.
처음에는 문장을 입력받으면 이중배열을 이용해 하나씩 비교하려고 했다.
생각해보니 그 방향이 아니었다. 배열 내에서 카운트를 하는 게 아니기 때문이다.
그렇다면 배열에서 기준점을 잡아서 앞뒤로 분석을 해야하나 싶어서 만약 input[i]가 주어진다면 input[i-1]과 input[i+1]을 비교하려고 했다. 그런데 그렇게 한다면 일단 input[0]과 input[strlen(input)]에서 좀 애매해진다. 그리고 반복되지 않는 abc같은 배열도 연속된 알파벳의 배열인데 이런 배열은 셀 수가 없다.
어쩔 수 없이 오늘도 구 선생님의 도움을 받았다.
#include<stdio.h>
#include<string.h>
int main() {
int n;
char input[101];
scanf("%d", &n);//입력받는 배열의 개수
int count = n;
for (int i = 0; i < n; i++) {
scanf("%s", input);
int len = strlen(input);
char first = 0;
int cnt[26] = { 0 };
/*n번 동안 문장을 입력받고 비교를 위해 사용하는 배열과 변수를 초기화*/
for (int j = 0; j < len; j++) {
if (first != input[j]) { //만약 앞의 알파벳과 다르다면
first = input[j];//그 알파벳을 새로운 기준으로 잡고
cnt[input[j] - 'a'] += 1;//그 알파벳의 수를 센다.
}
if (cnt[input[j] - 'a'] == 2) {
count -= 1;
break;
/*만약 한 문자가 문장에 두개 이상 카운트된다면 연속된 문장이 아니므로 총 문장개수에서 하나를 빼고 반복문을 종료한다.*/
}
}
}
printf("%d", count);
return 0;
}
일단 문제에서 요구하는 것이 무엇인지 파악하는 것이 필요하다. 문제를 읽고나서 빠르게 답을 내어야 하는 대한민국식 입시교육과 공무원 시험에 특화된 문과식 교육이 아직 몸에 배여 있어서 문장을 제대로 이해하기도 전에 코드를 입력하고 있다. 일단 문제에서 원하는 입력과 출력을 보고 이걸 해결하기 위해서 어떤 알고리즘을 구현해야 하는지 진득하게 고민해야 한다.