-
백준(BOJ) 1543번 문서 검색알고리즘 풀이/백준(Boj) 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;
}
'알고리즘 풀이 > 백준(Boj)' 카테고리의 다른 글
백준(BOJ) 1707번 이분 그래프 (0) 2019.08.17 백준(BOJ) 1049번 기타줄 (0) 2019.08.16 백준(BOJ) 11650번 좌표 정렬하기 (0) 2019.08.15 백준(BOJ) 2231번 분해합 (0) 2019.08.14 백준(BOJ) 2294번 동전 2 (0) 2019.08.13