[백준/BOJ] 백준 1543번 : 문서 검색

2020. 8. 4. 11:52알고리즘 문제풀이

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

 

1543번: 문서 검색

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

www.acmicpc.net

문서와 단어에 공백이 들어갈 수 있으므로 getline을 통해 문서와 단어를 입력받고, 문서에서 더 이상 단어를 찾을 수 없을 때까지 반복해서 단어를 찾는다. 문서에서 단어를 찾았을 때 찾은 단어의 앞쪽은 이 단어가 등장하지 않는것이므로 이 단어의 앞쪽을 문서에서 지우고, 중복되지 않게 단어를 찾기 위해 찾은 이 단어도 문서에서 지운다. 즉 이 부분들을 지운다는 것은 찾은 단어의 뒷부분만 문서에 남긴다는 뜻이므로 text.substr(text.find(f_text) + f_text.size()) 를 이용했다

 

코드

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

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

	string text;
	string f_text;
	int cnt = 0;
	
	//문자열에 공백이 들어갈 수 있으므로 getline을 통해 문서와 단어를 입력받는다
	getline(cin, text);
	getline(cin, f_text);

	//문서에서 더 이상 단어를 찾을수 없을때 까지 반복해서 단어를 찾는다
	while (text.find(f_text) != string::npos)
	{
		//단어 등장 개수 증가
		cnt++;

		//문서에서 찾은 단어의 앞쪽은 이 단어가 등장하지 않는것이므로
		//문서에서 찾은 단어와 이 단어의 앞쪽을 지운다
		text = text.substr(text.find(f_text) + f_text.size());
	}

	cout << cnt;
	
	return 0;
}