๊ตฌ๋ฆ
์ด๋ผ๋ ๊ณณ์์ ๋ฌธ์ ํ์ด ์ฑ๋ฆฐ์ง(๊ตฌ๋ฆํค ์ฑ๋ฆฐ์ง)๋ฅผ ํ๋ค๊ณ ํด์ ์ฐธ์ฌ ์ค์ด๋ค. ์ด๋ฒคํธ ๊ธฐ๊ฐ ๋์ ๋ฌธ์ ๊ฐ ๊พธ์ค์ด ์ฌ๋ผ์ค๋ฉฐ, ์ฃผ์ 2ํ์ฉ (ํน์ ๊ทธ ์ด์) ์ฑ๋ฆฐ์ง ๋ฌธ์ ๋ค์ ๋ํด ํ์ด๊ฐ ๊ฐ๋ฅํ ๋ฌธ์ ๋ค์ ํ์ดํด๋ณด๊ณ , ํ๊ธฐ๋ฅผ ๋จ๊ฒจ๋ณด๋ ค๊ณ ํ๋ค.
์ด ๋ฌธ์ ์ ๊ฒฝ์ฐ 1์ฃผ์ฐจ๋ณด๋ค ๋์ด๋๊ฐ ์๋ ๋ฌธ์ ์ด์ง๋ง, ์ฌ์ ํ ํน๋ณํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค๊ธฐ๋ณด๋ค๋ PS
์ ๊ธฐ์ด๊ฐ ๋๋ ์์ ํ์์ ํด์ ํ์ดํ๋ ๋ฌธ์ ์ด๋ค. ๋ฌธ์์ด์ 3๋ถ๋ถ์ผ๋ก ํ๋ ์ด์์ ๋ฌธ์์ด์ ํฌํจํด์ ๋๋๋ ๊ฒ์ ์์ ํ์์ ์ผ์ข
์ well-known
์๊ณ ๋ฆฌ์ฆ์ด๋ค. ๋น ์ง์์ด ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ฅผ ์ํํ๋ ค๋ฉด, ์ฌ์ด๋ฅผ ์นธ๋ง์ด ์น๋ ๋๋์ผ๋ก ๋ณ์ i, j๋ฅผ ๋์
ํ๋ฉด ๋๋๋ฐ, i
๋ ๋ฒ์๋ก, j
๋ ๋ฒ์๋ก ์ํํด์ฃผ๋ฉด ๋๋ค.
2์ค ๋ฃจํ๋ฅผ ๋๋ ํ์ด๋ก ๋ณด์ฌ์ ์๊ฐ๋ณต์ก๋๊ฐ ์ผ๋ก ๋ณด์ด์ง๋ง, ์ฌ์ค substr
์ ์๊ฐ๋ณต์ก๋๊ฐ ์ด๊ธฐ ๋๋ฌธ์, ์๋ ์ํ ์ฝ๋์ ์ ์ฒด ์๊ฐ๋ณต์ก๋๋ ์ด ๋๋ค. ์ด๋ผ? ๋๋ฌด ํฐ ๊ฑฐ ์๋๊ฐ? ์ถ์ง๋ง ์ด ๋นํจ์จ์ ์ธ ์๊ฐ๋ณต์ก๋์๋ ๋ฌธ์ ์กฐ๊ฑด์์ ์ด๊ธฐ ๋๋ฌธ์ ์ถฉ๋ถํ ํต๊ณผํ๋ ์ฝ๋์ด๋ค.
์ต์ข
์ ์ธ ๋ต์ ๊ตฌํ๊ธฐ ์ํด set
๋ด์์ ์๊ธฐ ์์ ์ด ๋ช ๋ฒ์งธ์ ์์นํ๋์ง ์ฐพ๊ธฐ ์ํด์๋ distance
ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ๋๊ณ , ๋ง์ฝ ์กฐ๊ฑด์ด ๋นก์ธ๋ค๋ฉด, PBDS Set
์ ํ์ฉํด์ ์๊ฐ๋ณต์ก๋๋ฅผ ๋ ๋จ๊ตด ์๋ ์๊ฒ ๋ค.
#include <bits/stdc++.h>using namespace std;int main() {int N; scanf("%d", &N);char buf[110]; scanf("%s", buf);string full = buf;set<string> mlist;for(int i = 1; i < N - 1; ++i) {for(int j = i + 1; j < N; ++j) {string a = full.substr(0, i);string b = full.substr(i, j - i);string c = full.substr(j);mlist.insert(a);mlist.insert(b);mlist.insert(c);}}int maxidx = 0;for(int i = 1; i < N - 1; ++i) {for(int j = i + 1; j < N; ++j) {string a = full.substr(0, i);string b = full.substr(i, j - i);string c = full.substr(j);int aidx = distance(mlist.begin(), mlist.find(a)) + 1;int bidx = distance(mlist.begin(), mlist.find(b)) + 1;int cidx = distance(mlist.begin(), mlist.find(c)) + 1;if (aidx + bidx + cidx > maxidx) maxidx = aidx + bidx + cidx;}}printf("%d\n", maxidx);return 0;}