이 문제에서 말하는 그룹 단어라고 함은 다음과 같다.
"ccazzzzbb는 c, a, z, b가 모두 연속해서 나타나고, kin도 k, i, n이 연속해서 나타나기 때문에 그룹 단어이지만, aabbbccb는 b가 떨어져서 나타나기 때문에 그룹 단어가 아니다."
위의 정의를 바탕으로 코드를 작성하면 된다.
만약에 문자열이 있다면, 문자열의 처음 문자부터 그룹 단어를 형성하고 있는지 확인하면 된다.
그룹 문자라면 연속적인 두 문자들이 계속 같을 것이고, 그룹 문자가 아니라면 연속적이지 않은 두 문자가 같은 문자를 가진 경우가 있을 것이다.
추가적으로, 이전의 문자를 통해서 이미 그룹 문자로 판명된 문자에 대해서는 검사할 필요가 없으므로, 별도의 bool 배열을 선언해준다.
해설코드(C++).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#include <cstring>
#include <iostream>
using namespace std;
string str;
int N;
int answer = 0;
bool chk[100] = {false};
int main() {
cin >> N;
for(int i = 1; i <= N; i++){
cin >> str;
bool flag = true;
memset(chk, false, sizeof(chk));
for(int j = 0; j < str.length(); j++){
if(chk[j])
continue;
char tmp = str[j];
int idx = j;
chk[j] = true;
for(int k = j + 1; k < str.length(); k++){
if(tmp == str[k]){
if(k - idx == 1){
idx = k;
chk[k] = true;
}else{
flag = false;
break;
}
}
}
}
if(flag) {
answer += 1;
}
}
cout << answer << endl;
return 0;
}
|
'알고리즘 > 백준' 카테고리의 다른 글
[BOJ 7453] 합이 0인 네 정수 (0) | 2020.06.13 |
---|---|
[BOJ 2875] 대회 or 인턴(반복문없는 if문 풀이, 시간복잡도 최소화) (0) | 2020.06.08 |
[BOJ 1062] 가르침(시간초과, C++, 40% 틀린이유) (0) | 2020.06.07 |
[BOJ 1541] 잃어버린 괄호 (0) | 2020.06.04 |
[BOJ 2533] 사회망 서비스(SNS) (0) | 2020.06.02 |