문제풀이/백준oj
[백준OJ] 1305번 광고
Hyeon-Uk
2021. 8. 4. 00:26
반응형
https://www.acmicpc.net/problem/1305
1305번: 광고
세준이는 길 한가운데에서 전광판을 쳐다보고 있었다. 전광판에는 광고가 흘러나오고 있었다. 한참을 전광판을 쳐다본 세준이는 이 광고가 의미하는 것이 무엇인지 궁금해지기 시작했다. 전광
www.acmicpc.net
-풀이-
L인 전광판에는 광고가 (광고 + 광고의 접두사) 로 이루어져있기때문에 , 가능한 광고의 길이의 최소를 구하기 위해서는 , L- (전광판 문자열에서 접두사와 접미사가 일치하는 최대 길이)를 구해주면 된다.
이때 전광판 문자열에서 접두사와 접미사가 일치하는 최대 길이는 KMP알고리즘을 이용해주면 된다.
-시간복잡도-
O(L)
-코드-
#include <iostream>
#include<algorithm>
#include<vector>
#include<string>
using namespace std;
vector<int> getPi(string p) {
int m = p.size(), 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::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n;
cin >> n;
string s;
cin>> s;
auto pi = getPi(s);
cout << n-pi[n-1];
return 0;
}
반응형