PS_Baekjoon
[백준 C++] 1316번 : 그룹 단어 체커
SMILELY
2023. 2. 28. 00:40
https://www.acmicpc.net/problem/1316
1316번: 그룹 단어 체커
그룹 단어란 단어에 존재하는 모든 문자에 대해서, 각 문자가 연속해서 나타나는 경우만을 말한다. 예를 들면, ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때
www.acmicpc.net
풀이 :
- 문자열에 한번만 등장하거나, 여러번 등장해도 연속한다면 그룹 단어다
- 이전에 등장했는데 연속하지 않을 경우 카운트하지 않는다
코드 :
#include <iostream>
#include <set>
using namespace std;
int main() {
int ans, n;
string s;
set<int> alphabet; // 이전에 등장했는지 파악하기 용이한 set 선언. int지만 아스키코드로 넣어지기 때문에 상관없음
bool res; // 그룹단어인지 판별하는 변수
cin >> n;
ans = 0;
while(n--){
alphabet.clear(); // 문자열이 들어올 때마다 체크해야 해서 새 문자열이 들어오기 전 초기화
cin >> s;
res = true; // res값도 true로 초기화
for(int i=0; i<s.size(); i++){
if((alphabet.count(s[i]) == 1) && (s[i-1] != s[i])){ //1인 경우 이미 등장했다는 것
res = false; //등장했지만 이전 인덱스 값이랑 다르다 = 연속하지 않는 것
break; //그룹단어가 아니라면 굳이 더 볼 필요가 없기 때문에 break한다
}
alphabet.insert(s[i]); //if문에 걸리지 않았다는 것은 새롭게 등장했거나 연속된다는 것
} //set은 중복을 허용하지 않기 때문에 계속 넣어도 하나의 값만 들어간다
if(res){ //res가 true라는 것은 그룹단어가 맞다는 것
ans++;
}
}
cout << ans << endl;
}