알고리즘/백준(BOJ)
백준 - 1305 광고
시나모온
2020. 7. 19. 07:00
문제 링크입니다 : https://www.acmicpc.net/problem/1305
1305번: 광고
첫째 줄에 광고판의 크기 L이 주어지고, 둘째 줄에 현재 광고판에 보이는 문자열이 주어진다. L은 백만보다 작거나 같은 자연수이다.
www.acmicpc.net
KMP 문제이다.
failure function 이용하면 쉽게 풀수 있는 문제였다! 물론 난 많이 틀렸다.. ㅋㅋㅋㅋ
#include <iostream>
#include <vector>
#include <string>
using namespace std;
vector<int> getPi(string p) {
int m = p.size();
int j = 0;
vector<int> pi(m, 0);
for(int i = 1; i < m; i++) {
while(j > 0 && p[i] != p[j]) {
j = pi[j - 1];
}
if(p[i] == p[j]) {
pi[i] = ++j;
}
}
return pi;
}
int main() {
ios_base :: sync_with_stdio(false);
cin.tie(NULL); cout.tie(NULL);
int N;
cin >> N;
string str;
cin >> str;
vector<int> pi = getPi(str);
cout << pi.size() - pi.back();
return 0;
}
개발 환경 : vscode
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~