Problem Solving/BOJ [백준 1786번] [KMP] 찾기 - 728x90 반응형 Approach 전형적인 KMP문제 KMP 알고리즘에 대해서는 다음 블로그 글을 참고하도록 하자. https://bowbowbow.tistory.com/6 KMP : 문자열 검색 알고리즘 문자열 검색이 뭐지? 워드프로세서를 사용할 때 찾기 기능을 사용한적 있을 겁니다. 브라우저에서도 Ctrl+F 단축키를 눌러 검색할 수 있습니다. 아래 이미지는 브라우저에서 "테이프"를 검색했 bowbowbow.tistory.com Code #include <bits/stdc++.h> #define fastio cin.tie(0)->sync_with_stdio(0) using namespace std; using ll = long long; using pii = pair<int, int>; using tiii = tuple<int, int, int>; int move_x[4] = {-1, 1, 0, 0}; int move_y[4] = {0, 0, -1, 1}; int pi[1000001]; vector<int> r; void get_pi(string v){ int m = v.size(), j = 0; for(int i = 1; i < m; i++){ while(j > 0 && v[i] != v[j]){ j = pi[j - 1]; } if(v[i] == v[j]){ pi[i] = ++j; } } } int kmp(string v1, string v2){ get_pi(v2); int n = v1.size(), m = v2.size(), j = 0; int result = 0; for(int i = 0; i < n; i++){ while(j > 0 && v1[i] != v2[j]){ j = pi[j - 1]; } if(v1[i] == v2[j]){ if(j == m - 1){ result++; r.push_back(i - m + 2); j = pi[j]; } else j++; } } return result; } int main() { fastio; string s, p; getline(cin, s); getline(cin, p); cout << kmp(s, p) << "\n"; for(int i = 0; i < r.size(); i++){ cout << r[i] << " "; } cout << "\n"; return 0; } 반응형 공유하기 URL 복사카카오톡 공유페이스북 공유엑스 공유 게시글 관리 구독하기비룡의 컴퓨터이야기 Contents Approach Code 당신이 좋아할만한 콘텐츠 [백준 13308번] [Dijkstra / DP] 주유소 2022.03.02 [백준 10538번] [Rabin-karp] 빅 픽쳐 2022.02.09 [백준 11438번] [LCA] LCA 2 2022.01.29 [백준 14938번] [Dijkstra] 서강그라운드 2022.01.15 댓글 0 + 이전 댓글 더보기