๐ ์ฌ์ฉ๋ชฉ์
๋ฌธ์์ด์ ์ฌ์ ์์ผ๋ก ๋์ดํ ๋ฐฐ์ด๋ก, ๋ฌธ์์ด ๋ฌธ์ ๋ฅผ ํ ๋ ์ฌ์ฉ.
๋ฌธ์์ด์ ๋ด๋๊ฒ ์๋๋ผ, ๋ฌธ์์ ์์ index๋ฅผ ๋ด๋๋ค.
์๋ฅผ ๋ค๋ฉด camel์ ๋ถ๋ถ ๋ฌธ์์ด์ camel, amel, mel, el, l ์ด๊ณ , ์ด๋ฅผ ์ฌ์ ์์ผ๋ก ๋์ดํ๋ฉด amel, camel, l, mel,el ์ด๋ค.
๐ ๊ตฌํ
์ฌ๋ฌ๋ฐฉ๋ฒ์ด ์์ง๋ง, 9249๋ฒ์ ํต๊ณผํ๋ ค๋ฉด O(N(logN)^2)์ ์๊ณ ๋ฆฌ์ฆ์ด ํ์ํ๋ค.(๋ํ์์ ํต์ฉ๋๊ณ ์๋ค๊ณ ํจ)
๊ฐ๋ตํ๊ฒ ๋งํ๋ฉด, ์ผ๋จ ์ฒซ ์งธ ๊ธ์๋ก ์ ๋ ฌ์ ํด ๊ทธ๋ฃน์ ๋๋๋ค, ๊ทธ ํ ๊ฐ์ ๊ทธ๋ฃน์ ์ ๋ฏธ์ฌ๋ฅผ d=1 ๋ถํฐ ์์ํด์, d*2 ๋ฒ ์งธ ๊ธ์ง๋ง ๋น๊ต๋ฅผ ํด์ ๊ทธ ๊ทธ๋ฃน์ ์์ ์ ๋ ฌ์ ํ๋ ๊ฒ์ด๋ค.
์ด ๋ d*2๋ฒ์งธ ๋จ์ด๋ ๋จ์ด์ ์ ๋ฏธ์ฌ๋ก ์ด๋ค ๊ทธ๋ฃน์ ์ํด์์์ผ๋ก, ๋จ์ด๋ฅผ ๋น๊ตํ๋๊ฒ ์๋๋ผ ๊ทธ๋ฃน์ ๋น๊ตํ๋ ๊ฒ๋ง์ผ๋ก๋ ์์๋ฅผ ์ ํ ์ ์๋ค.
ex) banana
์๋ ๋ธ๋ก๊ทธ์ ์ค๋ช ์ด ์์ฃผ ์์ธํ ๋์ด์๋ค.
๐ ๋งํฌ
์ ๋ฏธ์ฌ๋ฐฐ์ด
https://blog.naver.com/kks227/221028710658
๐ ํ
ํ์ด์ฌ์์ ์๋์ฒ๋ผ custom compare ํจ์๋ฅผ ๋ง๋ค์ด์ ๋๊ธฐ๋ ๊ฒ๋ณด๋ค,
def cmp(i,j):
if pos[i] != pos[j]:
return pos[i] - pos[j]
i += d
j += d
if i <n and j <n :
return pos[i] - pos[j]
else:
return j - i
sa.sort(key=cmp_to_key(cmp))
๋ฏธ๋ฆฌ ๊ณ์ฐํ ๋ค sort์ํค๋ฉด ํจ์ฌ ์๊ฐ์ ๋จ์ถ ์ํฌ ์ ์์๋ค.
def getGroup(x):
if x < n:
return pos[x]
else:
return -1
sa.sort(key=lambda x: (getGroup(x), getGroup(x + d)))