[C++] 백준 1543 문서 검색
2021. 3. 26.
반응형

www.acmicpc.net/problem/1543

 

1543번: 문서 검색

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

www.acmicpc.net

 

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
myoskin