본문 바로가기
ALGORITHM/BAEKJOON

[BOJ/Python] 20437. 문자열 게임 2

by 안녕나는현서 2021. 8. 28.
728x90

📌 문제

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

 

20437번: 문자열 게임 2

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

www.acmicpc.net

 

📌 문제 접근 방법

  1. defaultdict 진짜 편하다!
    alpha = defaultdict(list) : 이런 식으로 괄호 안에 값의 초기값 형태를 지정해주면 된다!
  2. 딕셔너리의 키가 없어도 바로 값을 저장할 수 있다.

 

📌 코드

import sys
from collections import defaultdict

'''
superaquatornado
2
'''

def string_game(string):
    len_str = len(string)

    # K개 이상 있는 문자만 따로 저장
    alpha = defaultdict(list)
   
    for i in range(len_str):
        if string.count(string[i]) >= K:
            alpha[string[i]].append(i)
    # alpha = {'u': [1, 7], 'r': [4, 11], 'a': [5, 8, 13], 'o': [10, 15]}

    # K개 이상 있는 문자가 없다면 -1
    if not alpha:
        return (-1,)
    
    # K개 이상 있는 문자에 대해 문자열 게임 진행
    min_str = 10000
    max_str = 0

    for idx_lst in alpha.values():
        for j in range(len(idx_lst)-K+1):
            temp = idx_lst[j+K-1] - idx_lst[j] + 1

            if temp < min_str:
                min_str = temp

            if temp > max_str:
                max_str  = temp
    
    return min_str, max_str


T = int(sys.stdin.readline())

for t in range(1, T+1):
    string = sys.stdin.readline().strip()
    K = int(sys.stdin.readline())

    print(*string_game(string))
728x90

댓글