어흥

[백준 1701] Cubeditor (C++) 본문

알고리즘/백준

[백준 1701] Cubeditor (C++)

라이언납시오 2020. 4. 12. 22:22
728x90
반응형

문제 링크: https://www.acmicpc.net/problem/1701

 

1701번: Cubeditor

문제 Cubelover는 프로그래밍 언어 Whitespace의 코딩을 도와주는 언어인 Cubelang을 만들었다. Cubelang을 이용해 코딩을 하다보니, 점점 이 언어에 맞는 새로운 에디터가 필요하게 되었다. 오랜 시간 고생한 끝에 새로운 에디터를 만들게 되었고, 그 에디터의 이름은 Cubeditor이다. 텍스트 에디터는 찾기 기능을 지원한다. 대부분의 에디터는 찾으려고 하는 문자열이 단 한 번만 나와도 찾는다. Cubelover는 이 기능은 Cube

www.acmicpc.net

1. 주의할 점

- KMP 알고리즘에 대해 알고 있어야 한다

 

 

 

2. 구현

- Substr함수를 통해 입력 받은 문자의 부분문자열을 구한다

- GetPi() 함수를 통해 부분문자열의 일치하는 접두사와 접미사의 최대 길이를 구한다

- 일치하는 부분 문자열의 최대 길이 -> GetPi() 함수를 통해 구한 Pi에서의 최대값

 

#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
using namespace std;

int getPi(string ptn) {
	int len = ptn.size();
	vector<int> pi(len, 0);
	int j = 0;
	for (int i = 1; i < len; i++) {
		while (j > 0 && ptn[i] != ptn[j]) {
			j = pi[j - 1];
		}
		if (ptn[i] == ptn[j]) 
			pi[i] = ++j;		
	}
	sort(pi.begin(), pi.end());
	return pi[len - 1];
}

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	string str;
	int maxi = 0;
	cin >> str;
	for (int i = 0; i < str.size(); i++) {
		string ptn = str.substr(i, str.size());
		int result = getPi(ptn);
		maxi = max(maxi, result);
	}
	cout << maxi;
	system("pause");
	return 0;
}
728x90
반응형

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

[백준 1944] 복제 로봇 (C++)  (0) 2020.04.15
[백준 1504] 특정한 최단 경로 (C++)  (0) 2020.04.14
[백준 1786] 찾기 (JAVA)  (0) 2020.04.10
[백준 16916] 부분 문자열 (JAVA)  (0) 2020.04.10
[백준 9938] 방 청소 (C++)  (0) 2020.04.10
Comments