๐ ๋ฌธ์
โ๏ธ ์ ๋ ฅ
โ๏ธ ์ถ๋ ฅ
๐ก ํ์ด
์ง๋์ฃผ ๋ฌธ์ ๋ค์ ๋นํด ์กฐ๊ธ ๋์ด๋๊ฐ ์์๋ ๊ฒ ๊ฐ๋ค. ๋ฌธ์ ๊ณต๊ฐ ๋น์ผ๊น์ง ํ์ง๋ ๋ชปํ๊ณ ๋ค์๋ ์ค์ ์ ํ๊ฒ๋์๋ค.
๋ฌธ์์ด์ ๊ฐ๋ฅํ ์กฐํฉ์ผ๋ก ๋๋๊ณ , ๊ทธ ์กฐํฉ๋ค์์ ์ต๋๋ฅผ ์ฐพ์์ผํ๋ค.
๋๋ ๋ฌธ์์ด์ ๊ฐ๋ฅํ ์กฐํฉ์ผ๋ก ๋๋๋ ํจ์ search๋ฅผ ๋ง๋ค์๋ค. ์ธ์๊ฐ์ผ๋ก ๋ค์ด์ค๋ start๋ ๋ฌธ์์ด ์กฐํฉ์ ์์์ ๋ปํ๊ณ cnt๋ ๋จ์ ๋ฌธ์์ด์ ๋ช ๋ถ๋ถ์ผ๋ก ๋๋ ๊ฒ์ธ์ง๋ฅผ ๋๊ฒจ์ฃผ๋๋ก ํ๋ค. global ๋ณ์ set์ ์ฌ์ฉํด์ ์ ์ฅํ๊ณ ์ค๋ณต์ ํ์ฉํ์ง ์๋๋ก ํ๋ค.
cal ํจ์์์๋ ๋ฌธ์์ด ์กฐํฉ๋ค์์ ์ต๋๊ฐ์ ๊ณ์ฐํ๋๋ก ํ๋ค. start์ cnt๋ search ํจ์์ ๋๊ฐ๊ณ , P๋ ๋ฌธ์์ด์ ์์๋ก ์ ์ฅํ๋ ๋ฐฐ์ด์ด๋ค.
์ดํ main ์์๋ ๋ฌธ์์ด์ ์ ๋ ฅ ๋ฐ๊ณ ํจ์๋ค์ ํธ์ถํด ๋๋๋ฉฐ map์ ์์ฑํด์ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํ ํ ์์๋๋ก ์ธ๋ฑ์ค๋ฅผ ๋ฃ์ด์ฃผ์๋ค.
def search(start, cnt):
global set
if cnt == 0:
set.add(s[start:])
return
for i in range(start + 1, n - cnt + 1):
set.add(s[start:i])
search(i, cnt - 1)
def cal(start, cnt):
global result
if cnt == 0:
result = max(result, map[s[start:]] + map[P[1]] + map[P[2]])
return
for i in range(start + 1, n - cnt + 1):
P[cnt] = s[start:i]
cal(i, cnt - 1)
n = int(input())
s = input().strip()
set = set()
P = [''] * 3
result = -1
map = {}
search(0, 2)
index = 1
for string in sorted(set):
map[string] = index
index += 1
cal(0, 2)
print(result)