728x90
์์ด ์๋ฌธ์๋ก ์ด๋ฃจ์ด์ง ์ต๋ ๊ธธ์ด 1,000์ธ ๋ฌธ์์ด์์, ๋ ๋ฒ ์ด์ ๋์ค๋ฉด์ ๊ฐ์ฅ ๊ธด ๋ถ๋ถ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์๋ฅผ ๋ค์ด, banana์ ๊ฒฝ์ฐ ๊ธธ์ด๊ฐ 5์ธ ๋ถ๋ถ ๋ฌธ์์ด์ banan, anana, ๊ธธ์ด๊ฐ 4์ธ ๋ถ๋ถ ๋ฌธ์์ด์ bana, anan, nana, ๊ธธ์ด๊ฐ 3์ธ ๋ถ๋ถ ๋ฌธ์์ด์ ban, ana, nan, ana์ด๋ฏ๋ก ana๊ฐ 2๋ฒ ๋์ค๋ฉด์ ๊ฐ์ฅ ๊ธธ์ด๊ฐ ๊ธธ๋ค. ๋ต์ ๋ฐ๋ผ์ ์ด ๊ฒฝ์ฐ 3์ด ๋๋ค.
ํํธ: ์คํจํจ์๋ฅผ ์ ์ด์ฉํด๋ณด์.
์ ๋ ฅ
ํ์ค ์ ๋ ฅ์ผ๋ก ์ ๋ ฅ์ ๋ฐ๋๋ค. ์ ๋ ฅ์ ํ ์ค๋ก ์ด๋ฃจ์ด์ง๋ฉฐ, ์ต๋ ๊ธธ์ด๊ฐ 1,000์ธ ์์ด ์๋ฌธ์๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด์ด๋ค.
์ถ๋ ฅ
ํ์ค ์ถ๋ ฅ์ผ๋ก ์ถ๋ ฅํ๋ค. ์ถ๋ ฅ์ ํ ์ค๋ก ์ด๋ฃจ์ด์ง๋ฉฐ, ์ ๋ ฅ๋ ๋ฌธ์์ด์์ ๋๋ฒ ์ด์ ๋์ค๋ฉด์ ๊ฐ์ฅ ๊ธธ์ด๊ฐ ๊ธด ๋ถ๋ถ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1
abcdefg
์์ ์ถ๋ ฅ 1
0
๋ ๋ฒ ์ด์ ๋์ค๋ฉด์ ๊ฐ์ฅ ๊ธด ๋ถ๋ถ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ ๊ณผ์ !
ํ๋ง๋๋ก ๋งํ๋ฉด ์ต๋ ํจํด์ ์ฐพ๋ ๋ฌธ์ ์ด๋ค.
์์ ์๊ฐ์ ๋ฐฐ์ด ์คํจํจ์๋ฅผ ์ฌ์ฉํ๋ ๋ฌธ์ ์๋ค.
์คํจํจ์(failure function)
์ ์ : f(i)๋ P[1..i]์์, ์ ๋์ฌ=์ ๋ฏธ์ฌ์ด๋ฉด์ ๊ฐ์ฅ ๊ธด ๊ฒ์ ๊ธธ์ด
- โข ์ ์์ ์ํด์, 0 ≤ f(i) < i (๋์ค์ ์๊ณ ๋ฆฌ์ฆ ์ฑ๋ฅ ๋ถ์์์ ์ค์ํ๊ฒ ์ฐ์)
- โข i+1๋ฒ์งธ ์์น์์ ๋งค์น๊ฐ ์คํจํ๋ฉด, P[1..i]๊น์ง๋ ๋งค์น๊ฐ ์ฑ๊ณตํ๋ค๋ ๋ป
- โข ์ ํ์ด์ง ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด, ๋์ผํ ์ ๋์ฌ์ ์ ๋ฏธ์ฌ๊ฐ ์ผ์นํ๊ฒ ๋ง๋ค๋ฉด ๋ค๋ฅธ ๋ถ๋ถ์ ๋น๊ตํ์ง ์์๋ ๋๋ค. (์ถ๊ฐ๋ก, ์ด ๋ถ๋ถ ๋ค์๋ถํฐ๋ง ๋น๊ตํ๋ฉด ๋๋ค)
- โข i - f(i)๋งํผ P๋ฅผ ์ค๋ฅธ์ชฝ์ผ๋ก ์ด๋ํ ์ ์๋ค.
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int main(){
ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
string banana;
cin >> banana;
int sameLen = banana.length() - 1;
int searchLen = 2;
bool escape = false;
vector<int> sameLenList(banana.length() * banana.length());
int listIndex = 0;
while (!escape)
{
int start = 0;
for (int k = 0; k < searchLen; ++k) {
string search = "";
for (int i = start; i < sameLen+start; ++i) {
search = search + banana[i];
}
start++;
string tmp = banana;
if (banana.find(search) != string::npos)
{
tmp.erase(tmp.begin(), tmp.begin() + banana.find(search)+1);
if (tmp.find(search) != string::npos)
{
// cout << sameLen << "\n";
sameLenList[listIndex] = sameLen;
escape = true;
break;
}
}
listIndex++;
}
sameLen--;
searchLen++;
}
int result = *max_element(sameLenList.begin(), sameLenList.end());
cout << result;
}
728x90
'๐ ์ ๊ณต ๊ณต๋ถ > ์๊ณ ๋ฆฌ์ฆ ํด์ ๋ฐ ์ค๊ณ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๊ณ ๋ฆฌ์ฆ] ๊ทธ๋ํ - ์ต๋จ๊ฑฐ๋ฆฌ ๊ตฌํ๊ธฐ(cpp) (0) | 2023.04.11 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ๋ฌธ์์ด ๋ค๋ฃจ๊ธฐ - ๋ก๋ง์ซ์(cpp) (0) | 2023.04.11 |
[์๊ณ ๋ฆฌ์ฆ] DP - ๊ณ๋จ ์ค๋ฅด๊ธฐ(cpp) (0) | 2023.04.11 |
[์๊ณ ๋ฆฌ์ฆ] Greedy algorithm - ์ด์งํธ ๋๋์ (cpp) (0) | 2023.02.09 |
[์๊ณ ๋ฆฌ์ฆ] ์ ๋ ฌ์ ์ต์ ์ฑ (0) | 2023.01.16 |