새로운 문자열 게임이 있다. 게임의 진행 방식은 아래와 같다.
알파벳 소문자로 이루어진 문자열 W가 주어진다.
양의 정수 K가 주어진다.
어떤 문자를 정확히 K개를 포함하는 가장 짧은 연속 문자열의 길이를 구한다.
어떤 문자를 정확히 K개를 포함하고, 문자열의 첫 번째와 마지막 글자가 해당 문자로 같은 가장 긴 연속 문자열의 길이를 구한다.
위와 같은 방식으로 게임을 T회 진행한다.
처음 볼 때 딕셔너리를 사용해서 딕셔너리의 value에서 list의 길이가 k 가 되면 그 길이를 구해서 가장 짧은, 가장 긴 글자인지 확인한다.
이 문제를 풀 때defaultdict
으로 푸는 것을 공부했다..!
from collections import defaultdict
# int를 기본 값으로 하는 defaultdict 생성
d = defaultdict(int)
# 존재하지 않는 키에 대해 접근
print(d['key']) # 출력: 0
# list를 기본 값으로 하는 defaultdict 생성
d = defaultdict(list)
# 존재하지 않는 키에 대해 접근
print(d['key']) # 출력: []
from collections import defaultdict
tc = int(input())
for _ in range(tc):
s = input()
k = int(input())
count = defaultdict(list)
shortest = float('inf')
longest = float('-inf')
no_ans = True
for i, char in enumerate(s):
count[char].append(i)
if len(count[char]) == k:
length = count[char][-1] - count[char][0] + 1
shortest = min(shortest, length)
longest = max(longest, length)
count[char].pop(0)
no_ans = False
if no_ans:
print(-1)
else:
print(shortest, longest)