mojo's Blog

[백준 1701] Cubeditor 본문

백준/etc

[백준 1701] Cubeditor

_mojo_ 2021. 8. 12. 02:19

문제 링크 => 1701번: Cubeditor (acmicpc.net)

 

1701번: Cubeditor

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

www.acmicpc.net


KMP 를 이용하는 문제이다.

 

임의의 문자열 S = "baacaa" 가 있다고 가정하자.

 

KMP Table 를 다음과 같은 과정으로 만들도록 한다.

 

"baacaa" => [ 0, 0, 0, 0, 0, 0 ]

"aacaa" => [ 0, 1, 0, 1, 2 ]

"acaa" => [ 0, 0, 1, 0 ]

"caa" => [ 0, 0, 0 ]

"aa" => [ 0, 1 ]

"a" => [ 0 ]

 

여기서 정답은 Table 를 만들는 과정속에서 얻어진 value 의 Maximum 이다.

 

풀이 code

 

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string>
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

int f(string s) {
	if (s.size() == 1) return 0;
	vector<int> table(s.size(), 0);
	int cnt = 0, j = 0;
	for (int i = 1; i < s.size(); i++) {
		while (j > 0 && s[i] != s[j]) j = table[j - 1];
		if (s[i] == s[j]) {
			table[i] = ++j;
			cnt = max(cnt, j);
		}
	}

	return cnt;
}

string getS(string s, int idx) {
	string ret = "";
	for (int i = idx; i < s.size(); i++) {
		ret += s[i];
	}
	return ret;
}

void solve() {

	string s;
	cin >> s;

	int cnt = 0;
	for (int i = 0; i < s.size(); i++) {
		cnt = max(cnt, f(getS(s,i)));
	}

	cout << cnt;
}

int main()
{
	ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

	solve();

	return 0;
}

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

[백준 17386] 선분 교차 1  (0) 2021.08.14
[백준 11758] CCW  (0) 2021.08.14
[백준 1786] 찾기  (0) 2021.08.11
Priority_queue 를 최대 Heap 으로 구현해보기  (0) 2021.08.05
문자열 공백 포함해서 받기 + split 하기  (0) 2021.08.02
Comments