https://www.acmicpc.net/problem/1316
#include <iostream>
#include <string>
using namespace std;
int main(){
int n;
cin >> n;
string arr[n];
for(int i=0;i<n;i++){
cin >> arr[i];
}
int answer = n;
for (int i=0;i<n;i++){
char check = arr[i][0];
while(!arr[i].empty()){
if(arr[i].find(check) == 0){
arr[i].replace(0,1,"");
}else if(arr[i].find(check) == string::npos){
check = arr[i][0];
}else if(arr[i].find(check) != 0){
answer -= 1;
break;
}
}
}
cout << answer;
}
총 들어온 단어의 개수에서, 그룹단어가 아닌 경우 하나씩 빼준다.
반복문을 돌며 첫 번째 글자를 find했을 때의 결과값이 0인 경우 지속적으로 첫 번째 글자를 제거해주고, 결과값이 0이 아닌 경우는 연속해서 나오는 것이 아니라는 의미이므로 그룹 단어 개수 - 1 을 해주고 반복문을 종료한다.
find의 결과값이 npos인 경우는 더 이상 해당 글자가 없으므로, 남은 문자열에서 새로 지워나갈 글자인 맨 앞 글자로 바꿔준다.
'알고리즘 > 백준' 카테고리의 다른 글
백준 10798번 세로읽기 [C++] (0) | 2023.11.25 |
---|---|
백준 25206번 너의 평점은 [C++] (0) | 2023.11.23 |
백준 2941번 크로아티아 알파벳 [C++] (1) | 2023.11.23 |
백준 11718번 그대로 출력하기 [C++] (1) | 2023.11.22 |
백준 1152번 단어의 개수 [C++] (0) | 2023.11.22 |