본문 바로가기
Problem Solving/BOJ

[문자열] python 20437 문자열 게임2

by Bokoo14 2023. 2. 3.

https://www.acmicpc.net/problem/20437

 

20437번: 문자열 게임 2

첫 번째 문자열에서 3번에서 구한 문자열은 aqua, 4번에서 구한 문자열은 raquator이다. 두 번째 문자열에서는 어떤 문자가 5개 포함된 문자열을 찾을 수 없으므로 -1을 출력한다.

www.acmicpc.net

# 2023.02.03
import sys
input = sys.stdin.readline
from collections import defaultdict

t = int(input())
for _ in range(t):
    w = input().rstrip()
    k = int(input())
    dic = defaultdict(list) 
    for i in range(len(w)): # 문자열의 index
        if w.count(w[i])>=k: # 해당하는 index의 문자열의 개수가 k보다 크다면
            dic[w[i]].append(i)

    if not dic: # 딕셔너리에 아무 값도 없으면 답이 없음
        print(-1)
    else:
        answer1=10**9
        answer2=0
        for i in dic: # 알파벳과 index를 저장한 dic
            for j in range(0, len(dic[i])-k+1): # 원하는 문자가 k개 이상 포함되어야 함->마지막 index: len(dic[i])-k
                answer1=min(answer1, dic[i][j+k-1]-dic[i][j]+1)
                answer2=max(answer2, dic[i][j+k-1]-dic[i][j]+1)
        print(answer1, answer2)

[ref] 슬라이딩 원도우란?

https://learning-e.tistory.com/36

 

[Algorithm] 슬라이딩 윈도우(Sliding Window) 알고리즘 with python

'슬라이딩 윈도우' 란 윈도우(특정 범위)가 있을때 윈도우 내부 요소의 값을 이용하여 문제를 풀이하는 알고리즘입니다. 아래 그림을 참조하면 조금 더 쉽게 이해하실 것입니다. 예를들어 [1,3,2,6

learning-e.tistory.com

[ref] 20437 

https://imzzan.tistory.com/108

 

[백준][Python] 20437번 문자열 게임 2

20437번: 문자열 게임 2 첫 번째 문자열에서 3번에서 구한 문자열은 aqua, 4번에서 구한 문자열은 raquator이다. 두 번째 문자열에서는 어떤 문자가 5개 포함된 문자열을 찾을 수 없으므로 -1을 출력한

imzzan.tistory.com

 

'Problem Solving > BOJ' 카테고리의 다른 글

[Binary Search] python 10815 숫자 카드  (0) 2023.02.05
[Two Pointer] python 1806 부분합  (0) 2023.02.04
[DP] python 1309 동물원  (0) 2023.02.03
[DP] python 12852 1로 만들기2  (0) 2023.02.01
[DP] python 2193 이친수  (0) 2023.01.29