백준 문제풀이/실버4

백준 1543번 - 문서 검색

void_melody 2022. 3. 17. 17:53

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

 

1543번: 문서 검색

세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한

www.acmicpc.net

검색하고 싶은 단어를 want라는 string타입의 변수에 넣어놓자.

문서와 단어를 비교했을 때 일치한다면 그 다음 비교는 want의 다음 칸부터 검색을 해야지, 인덱스 한칸만 넘어가서 검색을 하면 안된다는 것에 유의해야한다.

input[i+j] == want[j]로 하나씩 찾고

만약 n == length, 즉 다 맞았다면 count를 하나 해주고 want 수만큼 점프해야하므로 

i = i + length - 1을 해주었다(i+length만 하는게 원래는 맞지만 반복문의 i++을 신경써야해서 -1을 해주었다.)

#include <iostream>
#include <string>

using namespace std;

int main()
{
	ios::sync_with_stdio(false);
	cin.tie(NULL);
	cout.tie(NULL);

	string input, want;
	getline(cin, input);
	getline(cin, want);

	const int length = want.length();
	int i = 0;
	int count = 0;
	while (i < input.length())
	{
		int n = 0;
		for (int j = 0; j <= length; j++)
		{
			if (n == length)
			{
				count++;
				i = i + length - 1; // 마지막에 i++가 있어서 하나를 빼줌.
				break;
			}
			if (input[i+j] == want[j])
			{
				n++;
				continue;
			}
			else
			{
				break;
			}
		}
		i++;
	}

	cout << count;
	return 0;
}