PS/문자열 알고리즘[String]

백준 5525 IOIOI(c++)

SeungbeomKim 2022. 7. 5. 19:21
반응형

https://www.acmicpc.net/problem/5525

 

5525번: IOIOI

N+1개의 I와 N개의 O로 이루어져 있으면, I와 O이 교대로 나오는 문자열을 PN이라고 한다. P1 IOI P2 IOIOI P3 IOIOIOI PN IOIOI...OI (O가 N개) I와 O로만 이루어진 문자열 S와 정수 N이 주어졌을 때, S안에 PN이 몇

www.acmicpc.net

<코드>

#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