이번 문제는 굉장히 간단한 문제였다.
물론 필자는 오래걸렸다.
다음은 올바른 코드이다.
#include<iostream>
#include<string>
using namespace std;
int main(){
int a[26] = {0,};
int t;
int cnt = 0;
bool pass = false;
string input;
cin >> t;
for(int i = 0; i < t; i++){
cin >> input;
pass = true;
for(size_t j = 0; j < input.length(); j++){
if(j != 0 && a[static_cast<int>(input[j]) - 97] == 1 && input[j-1] != input[j]){
pass = false;
break;
} // index 0 제외, 문자가 이미 있을 때, 바로 앞의 문자가 나와 다를 때
a[static_cast<int>(input[j]) - 97] = 1; // a의 ascii = 97
}
if(pass){
cnt++;
}
fill(begin(a), end(a), 0);
}
cout << cnt;
return 0;
}
복잡해보이지만 천천히 보면 굉장히 간단한 과정을 거친다.
문제에서는 문자열이 주어질 때 그 문자열에서 각 문자가 연속해서 나타나는 경우만을 말한다.
고로 연속해서 나타나지 않는 경우를 제하고 남은 것만들 더하면 된다.
연속하지 않는 경우 : 이미 나온 문자임에도 연속하지 않고 나온 경우.
string 라이브러리를 사용해 입력받았고 이미 나온 알파벳의 확인을 위해 임의의 배열을 생성했다.
그리고 한 글자씩 확인해 넣었고 만일 해당 문자가 이미 나온 문자이고 바로 전 문자가 해당 문자와 다를 경우에 반복을 취소, 다른 문자를 받아왔다.
굉장히 간단한 문제임에도 세세한 부분이 꽤나 복잡했던 문제였다.
'백준' 카테고리의 다른 글
백준 2563 python (0) | 2024.09.10 |
---|---|
백준 2738 [python/c++] 풀이 (0) | 2024.07.21 |
백준 2941 c++ 풀이 (1) | 2024.07.09 |
백준 9086 c++/python 풀이 (0) | 2024.03.30 |
백준 5597 c++ 풀이 (0) | 2024.03.16 |