알고리즘 풀이/백준(Boj)

백준(BOJ) 1543번 문서 검색

100win10 2019. 8. 15. 17:58

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


문제

세준이는 영어로만 이루어진 어떤 문서를 검색하는 함수를 만들려고 한다. 이 함수는 어떤 단어가 총 몇 번 등장하는지 세려고 한다. 그러나, 세준이의 함수는 중복되어 세는 것은 빼고 세야 한다. 예를 들어, 문서가 abababa이고, 그리고 찾으려는 ababa라면, 세준이의 이 함수는 이 단어를 0번부터 찾을 수 있고, 2번부터도 찾을 수 있다. 그러나 동시에 셀 수는 없다.

세준이는 문서와 검색하려는 단어가 주어졌을 때, 그 단어가 최대 몇 번 중복되지 않게 등장하는지 구하는 프로그램을 작성하시오.


나의풀이:

주의할점은 첫째로 cin 으로 입력시 enter까지 포함되 공백문자가 포함되기 때문에 getline 으로 문자를 받아야 한다.



두번째는 검색하려는 단어가 문서보다 큰 경우에 있어서 예외처리를 해주자.



최대한 많은 단어를 찾아야 하기때문에 i =0부터 시작하면서 b의 사이즈 만큼 같다면 sum을 +1 해주고 그만큼 뛰어넘게 된다.





코드 ( C ++ )


#include <iostream>

#include <string>

using namespace std;


string a;

string b;


int main()

{

getline(cin, a);

  getline(cin, b);


//b가 더 클경우 예외처리

if (a.size() < b.size())

cout << 0 << "\n";

else {


int sum = 0;

for (int i = 0; i < a.size() - b.size() + 1; ++i)

{

bool check = true;

for (int j = 0; j < b.size(); ++j)

{

check = true;

if (a[i + j] != b[j]) {

check = false;

break;

}

}

if (check) {

sum++;

i += b.size() - 1;

}

}

cout << sum << "\n";

}

return 0;

}