[BOJ][๐ก5][๋ฐฑ์ค#20437] ๋ฌธ์์ด ๊ฒ์ 2
์์ฑ:    
์ ๋ฐ์ดํธ:
์นดํ ๊ณ ๋ฆฌ: BOJ Gold V
๋ฌธ์ ์ถ์ฒ
๋ฌธ์
์๋ ์ ์ด์ด ์๋ก์ด ๋ฌธ์์ด ๊ฒ์์ด ์๋ค. ๊ฒ์์ ์งํ ๋ฐฉ์์ ์๋์ ๊ฐ๋ค.
์ํ๋ฒณ ์๋ฌธ์๋ก ์ด๋ฃจ์ด์ง ๋ฌธ์์ด W๊ฐ ์ฃผ์ด์ง๋ค. ์์ ์ ์ K๊ฐ ์ฃผ์ด์ง๋ค. ์ด๋ค ๋ฌธ์๋ฅผย ์ ํํ K๊ฐ๋ฅผ ํฌํจํ๋ย ๊ฐ์ฅ ์งง์ ์ฐ์ย ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ค. ์ด๋ค ๋ฌธ์๋ฅผ ์ ํํ K๊ฐ๋ฅผ ํฌํจํ๊ณ , ๋ฌธ์์ด์ ์ฒซ ๋ฒ์งธ์ ๋ง์ง๋ง ๊ธ์๊ฐ ํด๋น ๋ฌธ์๋ก ๊ฐ์ ๊ฐ์ฅ ๊ธด ์ฐ์ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๊ตฌํ๋ค.
์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ๊ฒ์์ Tํ ์งํํ๋ค.
์ ๋ ฅ
๋ฌธ์์ด ๊ฒ์์ ์ T๊ฐ ์ฃผ์ด์ง๋ค. (1 โคย T โค 100) ๋ค์ ์ค๋ถํฐ 2๊ฐ์ ์ค ๋์ ๋ฌธ์์ด W์ย ์ ์ย K๊ฐ ์ฃผ์ด์ง๋ค. (1 โค Kย โค |W|ย โค 10,000)ย
์ถ๋ ฅ
T๊ฐ์ ์ค ๋์ ๋ฌธ์์ด ๊ฒ์์ 3๋ฒ๊ณผ 4๋ฒ์์ ๊ตฌํ ์ฐ์ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๊ณต๋ฐฑ์ ์ฌ์ด์ ๋๊ณ ์ถ๋ ฅํ๋ค. ๋ง์ฝย ๋ง์กฑํ๋ ์ฐ์ ๋ฌธ์์ด์ดย ์์ ์ย -1์ย ์ถ๋ ฅํ๋ค.
์์
์์ 1
์ ๋ ฅ
2
superaquatornado
2
abcdefghijklmnopqrstuvwxyz
5
์ถ๋ ฅ
4 8
-1
์์ 2
์ ๋ ฅ
1
abaaaba
3
์ถ๋ ฅ
3 4
My Sol
def check(txt):
D = {}
l = len(txt)
for i in range(l):
t = txt[i]
if not D.get(t, []):
D[t] = []
D[t].append(i)
return D
def check_length(D, K):
ret = [1e5, 0]
for arr in D.values():
l = len(arr)
if l < K: continue
for i in range(l-K+1):
gap = arr[i+K-1]-arr[i]+1
if ret[0] > gap: ret[0] = gap
if ret[1] < gap: ret[1] = gap
return [-1] if ret == [1e5, 0] else ret
T = int(input())
for _ in range(T):
txt = input()
K = int(input())
D = check(txt)
ret = check_length(D, K)
print(*ret)
๊ฐ๋จํ๊ฒ ํด๊ฒฐํ ์ ์๋ ๋ฌธ์ ์๋ค.
- ๊ฐ ํ ์คํธ์ผ์ด์ค๋ง๋ค ์ฃผ์ด์ง๋ ํ ์คํธ๋ฅผ ํ์ธํ๋ค.
- ํ
์คํธ์ ๊ฐ ๋ฌธ์๋ง๋ค ๋์
๋๋ฆฌ์ index๋ฅผ ๋ฃ์ด ๋ฐฐ์ด๋ก ํ์ํ๋ค. ๋๋
check
ํจ์์์txt
๋ฅผ ๋ฐ์ index๋ค์ ๊ฐ์ผ๋ก ํ๋D
๋์ ๋๋ฆฌ๋ฅผ returnํด์ฃผ์๋ค. - ์ต์ K๊ฐ๋ฅผ ํฌํจํ๋ ๋ฌธ์์ด์ ์ต์๊ธธ์ด์ ์ต๋๊ธธ์ด๋ฅผ ํ์ธํด์ผ ํ๋ฏ๋ก, D์ ๊ฐ array๋ง๋ค
K-1
๊ฐ์ gap์ผ๋ก index์ ์ฐจ์ด๋ฅผ ํ์ธํ์ฌ ์ต๋์ต์๋ฅผ ๊ตฌํ๋ค. ๋๋ ์ด๋ฅผcheck_length
ํจ์ ๋ด์์ ์ฒ๋ฆฌํด์ฃผ์๋ค. ์ต์ด ์ด๊ธฐํ๋[์ต์, ์ต๋]
์ธ ๊ฒฝ์ฐ[1e5, 0]
์ผ๋ก ์ด๊ธฐํํ๊ณ ์ด์ ๋์กฐํ์ฌ ๋ณ๊ฒฝ, ๊ฐฑ์ ํ๋ ๋ฐฉ์์ด๋ค. - ๋ง์ฝ K๊ฐ๋ฅผ ํฌํจํ๋ array๊ฐ ํ๋๋ผ๋ ์์ผ๋ฉด
ret
์[1e5, 0]
์ด๋ฏ๋ก[-1]
์ returnํ๊ณ ์๋๋ผ๋ฉด ์ต๋์ต์๊ฐ ๋ฐ์๋ret
์ returnํ๋ค. check_length
ํจ์์ ๋ฐํ๊ฐ์ spreadํ์ฌ ์ถ๋ ฅํ๋ค.
๊ฒฐ๊ณผ
๋ง์์ต๋๋ค!!
๋๊ธ๋จ๊ธฐ๊ธฐ