https://www.acmicpc.net/problem/1543
영어로만 이루어진 문서가 주어질 때 검색하고 싶은 단어가 중복되지 않게 몇번 등장하는지 알아보자.
문제의 난이도에 비해 정답률이 낮은게 의문이었다. 아마 원인은 String 클래스의 find 함수나 indexOf 함수를 이용하며 생기는 검색 속도 문제일꺼 같다.
이번 문제는 String 클래스의 find와 indexOf 함수를 합쳐놓은(?) 방식으로 풀었다.
#include <iostream>
#include <string>
using namespace std;
bool compare(string& input, string& word, int pos, int len) {
for (int i = 0; i < len; i++)
if (input[pos + i] != word[i])
return false;
return true;
}
int main()
{
string input, word;
getline(cin, input);
getline(cin, word);
cin >> input >> word;
int inputLen = input.length();
int wordLen = word.length();
int res = 0;
for (int i = 0; i <= inputLen - wordLen;) {
if (input[i] == word[0]) {
if (compare(input, word, i, wordLen)) {
res++;
i += wordLen;
}
else
i++;
}
else
i++;
}
cout << res;
return 0;
}
2019-06-02 18:49:21에 Tistory에서 작성되었습니다.