#include <bits/stdc++.h>
using namespace std;
int main() {
int N;
cin >> N;
int answer = 0;
for(int i = 0; i < N; i++) {
vector<int> arr(27,0);
string str;
cin >> str;
int idx = 1, j = 0;
if(str.empty()) continue;
else arr[str[0] % 26]++;
for(j = 1; j < str.length(); j++) {
if(str[j] != str[j-1]) idx = 0;
if(arr[str[j] % 26] != idx) break;
else { arr[str[j] % 26]++; idx++;}
}
if(j == str.length()) answer++;
}
cout << answer;
}
배열을 알파벳 갯수+1개 만큼 만든다음 각 알파벳이 들어올 때마다 % 26한 배열로 넣는다. ( 알파벳마다 아스키 코드값이 있을테고 전체 알파벳 갯수로 나누면 각 알파벳마다 1개의 배열에 들어가게 되므로 이렇게 구현하였다!)
그렇게 하며 같은 알파벳이 연속해서 들어오면 idx(index)값이 배열과 같은 숫자 크기로 증가하게 되며 새로운 알파벳이 들어오면 idx가 0이 되도록하였다. 그래서 새로운 알파벳이 들어오는데 이미 기존에 있었던 알파벳이면 떨어져서 나왔다는 의미가 되니 break를 하도록 하였다.
그래서 끝까지 문자열을 훑은 것들만 숫자를 세서 출력해주었다.
문제: https://www.acmicpc.net/problem/1316
'Problem Solving > 백준' 카테고리의 다른 글
[백준/C++] 5598번 카이사르 암호 (0) | 2022.01.24 |
---|---|
[백준/C++] 4659번 비밀번호 발음하기 (0) | 2022.01.24 |
[백준/C++] 11721번 열 개씩 끊어 출력하기 (0) | 2022.01.24 |
[백준/C++] 1159번 농구 경기 (0) | 2022.01.17 |
단어 공부 (0) | 2022.01.16 |