Files
baekjoon-study/workbook_8708/gold/20437-g5.py
2026-03-03 15:46:31 +09:00

49 lines
1.5 KiB
Python

# 문자열 게임 2
import sys
input = sys.stdin.readline
def find_str(w, k):
result = {chr(i): [] for i in range(97, 123)}
ans1 = float("inf")
ans2 = -1
for i, c in enumerate(w):
result[c].append(i)
for lst in result.values():
for i in range(len(lst)-k+1):
ans1 = min(ans1, lst[i+k-1] - lst[i]+1)
ans2 = max(ans2, lst[i+k-1] - lst[i]+1)
return (ans1, ans2)
def solution():
t = int(input().rstrip())
for _ in range(t):
w = input().rstrip()
k = int(input().rstrip())
answer1, answer2 = find_str(w, k)
if answer2 == -1:
print(answer2)
else:
print(answer1, answer2)
return
solution()
"""
걸린 시간: 1시간 좀 넘게
시간 복잡도: 각 문자마다 슬라이딩 윈도우로 한번씩만 보기 때문에 O(n)이다.
해설: 전체 문자열을 한 번만 돌면서 문자마다 시작, 끝 인덱스와 개수 등을 저장하면서 진행하려고 했는데 한번에 하기에는
변하는 것이 너무 많아서 문자마다 인덱스를 저장하고 답을 구하기로 했다.
이렇게 해도 각 문자마다 한번씩만 보기 때문에 O(n)으로 괜찮다.
모든 알파벳에 대해 나오는 인덱스를 리스트에 순서대로 넣은 후 슬라이딩 윈도우로 K만큼에 있는 인덱스들의 차 + 1을 구한다.
이것이 문자열의 길이인데 3번은 최소값, 4번은 최대값을 구하면 된다.
"""