- 문제 링크 : boj.kr/1605
- 난이도 : P3
- 태그 : KMP
코드
#include <bits/stdc++.h>
#define all(x) (x).begin(), (x).end()
#define INF 987654321
using namespace std;
using ll = long long;
using ld = long double;
using pii = pair<int,int>;
using pll = pair<ll, ll>;
vector<int> getPi(vector<int> P) {
int L = (int)P.size();
vector<int> Pi(L,0);
int j = 0;
for(int i = 1; i < L; ++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(0);
cin.tie(0); cout.tie(0);
int n;
cin >> n;
vector<int> arr(n);
for(auto &u : arr) cin >> u;
reverse(all(arr));
auto Pi = getPi(arr);
int k, p;
k = p = INF;
for(int i = 0; i < n; i++) {
int ck = n - (i+1);
int cp = (i+1) - Pi[i];
if(ck + cp < k + p) {
k = ck;
p = cp;
}
}
cout << k << " " << p;
return 0;
}
풀이
전체 배열을 뒤집게 되면 #1605와 비슷한 문제가 된다.
728x90
'PS' 카테고리의 다른 글
BOJ 11378 : 열혈강호 4 (0) | 2024.11.06 |
---|---|
BOJ 27524 : 점수 내기 (0) | 2024.11.05 |
BOJ 27485 : Compress Words (0) | 2024.11.03 |
BOJ 3033 : 가장 긴 문자열 (0) | 2024.11.02 |
BOJ 9249 : 최장 공통 부분 문자열 (0) | 2024.11.01 |