[C++] 백준 1543 문서 검색
반응형
1. 서론
어려워 보이지만 꽤 쉬운 문제
2. 문제 풀이
문자열 A가 주어진다. 그리고 문자열 B가 주어진다. 이 문자열 B가 문자열 A에 몇 번 나오는지를 count 하는 문제이다.
대신에 문자열을 중복해서 count 하면 안 된다. 그리고 공백을 포함한 문자열이 나온다.
처음에는 문자를 어떻게 count 해야 하는지 생각이 안 나서 문자 단위로 쪼개서 비교해봐야 하나 했는데 그냥 substr 함수를 사용하면 되는 문제다. substr함수는 문자열을 잘라주는 함수로 범위를 지정하면 그 위치, 길이만큼의 문자열을 반환해준다. 문자열 A에서 B의 길이만큼 잘라서 맞는지 아닌지 확인해보고 맞으면 그다음부터 B의 길이 다음의 위치부터 확인하고 아니면 그다음 문자부터 문자열 B의 길이만큼 잘라서 다시 확인한다.
3. 코드 설명
#include <string>
#include <iostream>
using namespace std;
int main()
{
int i, c = 0;
string s1, s2;
getline(cin, s1);
getline(cin, s2);
for (i = 0; i < s1.size(); i++)
{
if (s1.substr(i, s2.size()) == s2)
{
c++;
i += s2.size() - 1;
}
}
cout << c << endl;
}
getline을 사용해야만 공백을 포함해서 문자열을 입력받을 수 있어서 사용했다.
substr를 통해 문자열을 잘라서 비교하고 맞는 경우 count 후, s2의 길이만큼 i를 더해준다.
-1을 해준 이유는 반복문을 돌면서 +1을 자동으로 하기 때문!
반응형
'Algorithm' 카테고리의 다른 글
[C++] 백준 1568 새 (0) | 2021.03.27 |
---|---|
[C++] 백준 1302 베스트셀러 (0) | 2021.03.27 |
[C++] 백준 11004 K번째 수 (0) | 2021.03.26 |
[C++] 백준 2003 수들의 합 2 (0) | 2021.03.10 |
[C++] 백준 10989 수 정렬하기 3 (0) | 2021.03.01 |