[BOJ][๐ŸŸก5][๋ฐฑ์ค€#20437] ๋ฌธ์ž์—ด ๊ฒŒ์ž„ 2

์ž‘์„ฑ:    

์—…๋ฐ์ดํŠธ:

์นดํ…Œ๊ณ ๋ฆฌ:

ํƒœ๊ทธ: , , ,

๋ฌธ์ œ ์ถœ์ฒ˜

BAEKJOON Online Judge #20437


๋ฌธ์ œ

์ž‘๋…„์— ์ด์–ด ์ƒˆ๋กœ์šด ๋ฌธ์ž์—ด ๊ฒŒ์ž„์ด ์žˆ๋‹ค. ๊ฒŒ์ž„์˜ ์ง„ํ–‰ ๋ฐฉ์‹์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด 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)

๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค.

  1. ๊ฐ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋งˆ๋‹ค ์ฃผ์–ด์ง€๋Š” ํ…์ŠคํŠธ๋ฅผ ํ™•์ธํ•œ๋‹ค.
  2. ํ…์ŠคํŠธ์˜ ๊ฐ ๋ฌธ์ž๋งˆ๋‹ค ๋”•์…”๋„ˆ๋ฆฌ์— index๋ฅผ ๋„ฃ์–ด ๋ฐฐ์—ด๋กœ ํ‘œ์‹œํ•œ๋‹ค. ๋‚˜๋Š” check ํ•จ์ˆ˜์—์„œ txt๋ฅผ ๋ฐ›์•„ index๋“ค์„ ๊ฐ’์œผ๋กœ ํ•˜๋Š” D ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ returnํ•ด์ฃผ์—ˆ๋‹ค.
  3. ์ตœ์†Œ K๊ฐœ๋ฅผ ํฌํ•จํ•˜๋Š” ๋ฌธ์ž์—ด์˜ ์ตœ์†Œ๊ธธ์ด์™€ ์ตœ๋Œ€๊ธธ์ด๋ฅผ ํ™•์ธํ•ด์•ผ ํ•˜๋ฏ€๋กœ, D์˜ ๊ฐ array๋งˆ๋‹ค K-1 ๊ฐœ์˜ gap์œผ๋กœ index์˜ ์ฐจ์ด๋ฅผ ํ™•์ธํ•˜์—ฌ ์ตœ๋Œ€์ตœ์†Œ๋ฅผ ๊ตฌํ•œ๋‹ค. ๋‚˜๋Š” ์ด๋ฅผ check_length ํ•จ์ˆ˜ ๋‚ด์—์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ์—ˆ๋‹ค. ์ตœ์ดˆ ์ดˆ๊ธฐํ™”๋Š” [์ตœ์†Œ, ์ตœ๋Œ€]์ธ ๊ฒฝ์šฐ [1e5, 0]์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ์ด์™€ ๋Œ€์กฐํ•˜์—ฌ ๋ณ€๊ฒฝ, ๊ฐฑ์‹ ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.
  4. ๋งŒ์•ฝ K๊ฐœ๋ฅผ ํฌํ•จํ•˜๋Š” array๊ฐ€ ํ•˜๋‚˜๋ผ๋„ ์—†์œผ๋ฉด ret์€ [1e5, 0]์ด๋ฏ€๋กœ [-1]์„ returnํ•˜๊ณ  ์•„๋‹ˆ๋ผ๋ฉด ์ตœ๋Œ€์ตœ์†Œ๊ฐ€ ๋ฐ˜์˜๋œ ret์„ returnํ•œ๋‹ค.
  5. check_length ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’์„ spreadํ•˜์—ฌ ์ถœ๋ ฅํ•œ๋‹ค.


๊ฒฐ๊ณผ

๋งž์•˜์Šต๋‹ˆ๋‹ค!!

๋Œ“๊ธ€๋‚จ๊ธฐ๊ธฐ