본문 바로가기

알고리즘/백준

백준 1701 Cubeditor

https://www.acmicpc.net/problem/1701

 

1701번: Cubeditor

문제 Cubelover는 프로그래밍 언어 Whitespace의 코딩을 도와주는 언어인 Cubelang을 만들었다. Cubelang을 이용해 코딩을 하다보니, 점점 이 언어에 맞는 새로운 에디터가 필요하게 되었다. 오랜 시간 고��

www.acmicpc.net

 

KMP 알고리즘...? 을 활용하는 문제다. 시작점을 하나씩 옮겨가면서 failed 배열을 채운다

이 failed 배열은 보통 'pi' 로 표현하는 그 배열이다.

 

이 배열에서 가장 큰 값이, 가장 긴 문자열의 길이라는 걸 활용하면 문제를 풀 수 있다. 

 

/* Cubeditor */

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

using namespace std;

void input();
void solve();

int fail(string , vector<int> &);

string s;

int main(void) {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	input();
	solve();
	return 0;
}

void input() {
	cin >> s;
}

void solve() {

	int res = 0;
	for (int i = 0; i < s.length(); i++) {
		string anti = s.substr(i);
		vector<int> failed(anti.length(), 0);
		res = max(res, fail(anti, failed));
	}

	cout << res << '\n';
}

// aabab
int fail(string p, vector<int> & failed) {
	int j = 0, res = 0;
	for (int i = 1; i < p.length(); i++) {
		while (j > 0 && p[j] != p[i])
			j = failed[j-1];

		if (p[i] == p[j]) {
			failed[i] = ++j;
			res = max(res, j);
		}
	}
	return res;
}

'알고리즘 > 백준' 카테고리의 다른 글

백준 5557 1학년  (0) 2020.08.28
백준 1162 도로포장  (0) 2020.08.27
백준 14425 문자열 집합  (0) 2020.08.25
백준 2437 저울  (0) 2020.08.23
백준 13913 숨바꼭질 4  (0) 2020.08.23