본문 바로가기

Algorithm/Brute Force

(C++) - 백준(BOJ) 1543 : 문서 검색

반응형

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

 

1543번: 문서 검색

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

www.acmicpc.net

모든 경우의 수를 탐색하는 brute force문제였습니다.

📕 풀이방법

📔 입력 및 초기화

문서 docs, 검색 단어 searchWord, 정답 ans, 일치하는 문자 수를 저장할 변수 cnt, 단어의 길이 wordSize, 문서의 길이 docsSize를 저장합니다. 이후 docs와 searchWord에 문자열을 한 줄씩 입력받습니다.

📔 풀이과정

문서 전체에 대해 for loop를 수행합니다. 현재 확인하는 문서의 문자가 찾으려는 단어의 첫 번째와 같을 때까지 continue해 줍니다.

첫째가 같다면 이제 wordSize만큼 for loop를 수행해 단어를 확인하면서 docs와 일치하지 않을 때까지 cnt를 증가시켜줍니다.

확인한 이 후 cnt값이 wordSize라면 모두 일치했으므로 하나를 찾은 것 입니다. 따라서 ans를 증가시켜주며 wordSize - 1만큼 index를 건너뛰어 줍니다.

📔 정답출력

ans를 출력해줍니다.


📕 Code

#include <bits/stdc++.h>
using namespace std;

string docs,searchWord;
int ans, cnt, wordSize, docsSize;

int main(){

    getline(cin,docs);
    getline(cin,searchWord);

    for(int i = 0; i < docsSize; i++){
        cnt = 0;
        wordSize = searchWord.size();

        if(docs[i] != searchWord[0]) continue;

        for(int j = i; j < i + wordSize; j++,cnt++)
            if(docs[j] != searchWord[j-i] ) 
                break;
        
        if(cnt == wordSize){
            ans++;
            i += wordSize-1;
        }
    }
    cout << ans;
}