diff --git a/workbook_8708/gold/20437-g5.py b/workbook_8708/gold/20437-g5.py new file mode 100644 index 0000000..0d1942f --- /dev/null +++ b/workbook_8708/gold/20437-g5.py @@ -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번은 최대값을 구하면 된다. +"""