[Gold V] Title: 문자열 게임 2, Time: 2984 ms, Memory: 34924 KB -BaekjoonHub
This commit is contained in:
41
백준/Gold/20437. 문자열 게임 2/README.md
Normal file
41
백준/Gold/20437. 문자열 게임 2/README.md
Normal file
@@ -0,0 +1,41 @@
|
||||
# [Gold V] 문자열 게임 2 - 20437
|
||||
|
||||
[문제 링크](https://www.acmicpc.net/problem/20437)
|
||||
|
||||
### 성능 요약
|
||||
|
||||
메모리: 34924 KB, 시간: 2984 ms
|
||||
|
||||
### 분류
|
||||
|
||||
문자열, 슬라이딩 윈도우
|
||||
|
||||
### 제출 일자
|
||||
|
||||
2026년 1월 8일 20:05:37
|
||||
|
||||
### 문제 설명
|
||||
|
||||
<p>작년에 이어 새로운 문자열 게임이 있다. 게임의 진행 방식은 아래와 같다.</p>
|
||||
|
||||
<ol>
|
||||
<li>알파벳 소문자로 이루어진 문자열 W가 주어진다.</li>
|
||||
<li>양의 정수 K가 주어진다.</li>
|
||||
<li>어떤 문자를 정확히 K개를 포함하는 가장 짧은 연속 문자열의 길이를 구한다.</li>
|
||||
<li>어떤 문자를 정확히 K개를 포함하고, 문자열의 첫 번째와 마지막 글자가 해당 문자로 같은 가장 긴 연속 문자열의 길이를 구한다.</li>
|
||||
</ol>
|
||||
|
||||
<p>위와 같은 방식으로 게임을 T회 진행한다.</p>
|
||||
|
||||
### 입력
|
||||
|
||||
<p>문자열 게임의 수 T가 주어진다. (1 ≤ T ≤ 100)</p>
|
||||
|
||||
<p>다음 줄부터 2개의 줄 동안 문자열 W와 정수 K가 주어진다. (1 ≤ K ≤ |W| ≤ 10,000) </p>
|
||||
|
||||
### 출력
|
||||
|
||||
<p>T개의 줄 동안 문자열 게임의 3번과 4번에서 구한 연속 문자열의 길이를 공백을 사이에 두고 출력한다.</p>
|
||||
|
||||
<p>만약 만족하는 연속 문자열이 없을 시 -1을 출력한다.</p>
|
||||
|
||||
39
백준/Gold/20437. 문자열 게임 2/문자열 게임 2.py
Normal file
39
백준/Gold/20437. 문자열 게임 2/문자열 게임 2.py
Normal file
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user