코딩스토리

백준 1543번 - 문서 검색 본문

알고리즘/BOJ 문제 풀이

백준 1543번 - 문서 검색

kimtaehyun98 2020. 9. 9. 17:28

백준 1543번 - 문서 검색

www.acmicpc.net/problem/1543

 

1543번: 문서 검색

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

www.acmicpc.net

최근에 KMP알고리즘에 대해 공부 한 뒤라 자신 있게 풀어보려 들어갔다.

문제 n제한과 시간 제한을 보니 KMP 쓰기에도 아깝다고 생각이 들었다.

 

가볍게 브루트포스로 풀고 넘어가려 했는데...

반전!! 삐빅!! 틀렸습니다. 삐빅!! 런타임 에러.

 

하... 역시 문제는 풀어도 풀어도 어렵다...

실버 4 문제라고 절대 방심해선 안된다는 걸 깨달았다.

 

처음 틀렸습니다는 내가 문제를 제대로 안 읽고 중복을 계산하지 않아서 틀렸다ㅋㅋㅋ

 

다음의 런타임 에러는 아마 많은 사람들?(나만 그럴 수도)이 발생할 거 같은데

이유는 비교할 문자열이 더 길 수도 있다!!!

 

사실 진짜 당연한 건데 항상 놓치는 거 같다..

이거 때문에 20분 넘게 고민하고 있었다.. 코드는 완벽한데 뭐가 문젤까....

쨌든 질문검색에도 쓰여있지 않은 꿀팁? 인 듯

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <string>
using namespace std;
 
int main() {
    string origin, cmp;
    getline(cin, origin);
    getline(cin, cmp);
    if (origin.size() < cmp.size()) {
        cout << 0 << "\n";
        return 0;
    }
    int ans = 0;
    for (int k = 0; k <= origin.size() - cmp.size(); k++) {
        int temp = 0;
        for (int i = k; i <= origin.size() - cmp.size(); i++) {
            bool check = true;
            for (int j = 0; j < cmp.size(); j++) {
                if (origin[i + j] != cmp[j]) {
                    check = false;
                    break;
                }
            }
            if (check) {
                i += cmp.size() - 1;
                temp++;
                if (i > origin.size() - cmp.size())break;
            }
        }
        if (ans < temp)ans = temp;
    }
    cout << ans << "\n";
}
cs

항상 방심하지 말자!!

'알고리즘 > BOJ 문제 풀이' 카테고리의 다른 글

백준 16900번 - 이름 정하기  (0) 2020.09.17
백준 9248번 - Suffix Array  (0) 2020.09.13
백준 9663번 - N-Queen  (0) 2020.08.28
백준 2447번 - 별 찍기 - 10  (0) 2020.08.26
백준 14226번 - 이모티콘  (0) 2020.08.24
Comments