https://www.acmicpc.net/problem/5525
<코드>
#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
int main()
{
int n,m;
string ans="";
cin>>n;
int cnt=0;
vector<char>v;
for(int i=0;i<n;i++)
{
if(i==0) ans +="IOI";
else ans += "OI";
}
cin>>m;
for(int i=0;i<m;i++)
{
char c;
cin>>c;
v.push_back(c);
}
for(int i=0;i<m-(n*2+1);i++)
{
string result = "";
for(int j=i;j<(n*2+1)+i;j++)
{
result += v[j];
if(result == ans) cnt++;
}
}
cout<<cnt<<'\n';
}
<풀이과정>
n=1 일때 찾아야할 문자열은 IOI이고, 그 이후(n=2,3,4 ...)에는 OI만 계속적으로 추가해주면 된다.
그리고 추가적으로 길이(m)가 주어지는데, 길이가 주어지므로 char형 벡터를 선언해주고, 벡터에 문자 하나하나씩 추가해준다.
이제 마지막으로 핵심 과정이다. 예시를 들어 문자열 n=1 일 때, 찾아야할 문자열은 IOI이므로 검사구간 인덱스는 i=0에서 m-(n*2+1)-1이 된다. 왜냐하면 문자열의 길이가 13(인덱스 = 0~ 12)일때 10번 인덱스까지만 찾으면, 10 11 12 인덱스가 마지막 인덱스가 되기 대문이다. 안에 들어가 for문에 들어갈 초기식 조건식은 j=i부터 시작해서, j<n*2+1+i에 끝이 나게 된다. 0 1 2, 1 2 3, 2 3 4 순으로 검사하게 된다.
'PS > 문자열 알고리즘[String]' 카테고리의 다른 글
백준 1212 8진수 2진수(c++) (0) | 2022.07.06 |
---|---|
백준 1373 2진수 8진수(c++) (0) | 2022.07.06 |
백준 14425 문자열 집합(c++) (0) | 2022.07.06 |
백준 1764 듣보잡(c++) (0) | 2022.07.04 |
백준 1357 뒤집힌 덧셈 (0) | 2022.07.04 |