20437-g5 성공
This commit is contained in:
48
workbook_8708/gold/20437-g5.py
Normal file
48
workbook_8708/gold/20437-g5.py
Normal file
@@ -0,0 +1,48 @@
|
||||
# 문자열 게임 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번은 최대값을 구하면 된다.
|
||||
"""
|
||||
Reference in New Issue
Block a user