20437. 문자열게임2
20437번: 문자열 게임 2
첫 번째 문자열에서 3번에서 구한 문자열은 aqua, 4번에서 구한 문자열은 raquator이다. 두 번째 문자열에서는 어떤 문자가 5개 포함된 문자열을 찾을 수 없으므로 -1을 출력한다.
www.acmicpc.net
- 내 풀이
- 처음에 a문자열로 k만큼 가지고 다른 값으로 처음과 끝을 가지는 문자열을 찾는 것으로 착각해서 오래걸림
- defaultdict으로 해당 문자열을 key로, 위치값을 value list로 넣고
- 해당 수만큼을 포함하는 최단, 최장 길이 구하기
from collections import defaultdict
#어떤 문자를 k개 포함하는 가장짧은 문자열 길이
#포함하고, 처음, 끝이 해당문자인 가장 긴 문자열
n=int(input())
for _ in range(n):
wlist=list(input().rstrip())
k=int(input())
ans1, ans2=int(1e9),0
wdict=defaultdict(list)
for idx,w in enumerate(wlist):
wdict[w].append(idx)
for k1,v1 in wdict.items():
if len(v1)>=k:
for i in range(len(v1)-k+1):
ans1=min(ans1,wdict[k1][i+k-1]-wdict[k1][i]+1)
ans2=max(ans2,wdict[k1][i+k-1]-wdict[k1][i]+1)
if ans1==int(1e9):
print(-1)
else:
print(ans1, ans2)
'코딩테스트 > BOJ' 카테고리의 다른 글
| [백준][그리디][비트마스킹] 1052.물병 (0) | 2023.08.25 |
|---|---|
| [백준][다익스트라] 5972. 택배 배송 (0) | 2023.08.22 |
| [백준][구현] 15927.회문은 회문아니야!! (0) | 2023.08.12 |
| [백준][구현][분할정복][DFS] 16719. JOAC (0) | 2023.08.12 |
| [백준][그리디] 15903. 카드 합체 놀이 (0) | 2023.08.02 |