diff --git a/백준/Gold/20437. 문자열 게임 2/README.md b/백준/Gold/20437. 문자열 게임 2/README.md new file mode 100644 index 0000000..41b9968 --- /dev/null +++ b/백준/Gold/20437. 문자열 게임 2/README.md @@ -0,0 +1,41 @@ +# [Gold V] 문자열 게임 2 - 20437 + +[문제 링크](https://www.acmicpc.net/problem/20437) + +### 성능 요약 + +메모리: 34924 KB, 시간: 2984 ms + +### 분류 + +문자열, 슬라이딩 윈도우 + +### 제출 일자 + +2026년 1월 8일 20:05:37 + +### 문제 설명 + +
작년에 이어 새로운 문자열 게임이 있다. 게임의 진행 방식은 아래와 같다.
+ +위와 같은 방식으로 게임을 T회 진행한다.
+ +### 입력 + +문자열 게임의 수 T가 주어진다. (1 ≤ T ≤ 100)
+ +다음 줄부터 2개의 줄 동안 문자열 W와 정수 K가 주어진다. (1 ≤ K ≤ |W| ≤ 10,000)
+ +### 출력 + +T개의 줄 동안 문자열 게임의 3번과 4번에서 구한 연속 문자열의 길이를 공백을 사이에 두고 출력한다.
+ +만약 만족하는 연속 문자열이 없을 시 -1을 출력한다.
+ diff --git a/백준/Gold/20437. 문자열 게임 2/문자열 게임 2.py b/백준/Gold/20437. 문자열 게임 2/문자열 게임 2.py new file mode 100644 index 0000000..6bea24c --- /dev/null +++ b/백준/Gold/20437. 문자열 게임 2/문자열 게임 2.py @@ -0,0 +1,39 @@ +import sys +from collections import deque +from collections import defaultdict + +input = sys.stdin.readline +max_value = sys.maxsize + +T = int(input()) +window = deque() + +for _ in range(T): + W = input().rstrip() + K = int(input()) + # 어떤 문자를 정확히 K를 포함하는 가장 짧은 연속 문자열의 길이를 구한다. + + dic = defaultdict(list) + + for i in range(len(W)): + if W.count(W[i])>=K: + dic[W[i]].append(i) + + if not dic: + print(-1) + continue + else: + small_length = max_value + big_length = -1 + + for key in dic: + for i in range(len(dic[key]) - K + 1): + length = dic[key][i + K - 1] - dic[key][i] + 1 + if length < small_length: + small_length = length + if length > big_length: + big_length = length + + print(small_length, big_length) + +