boj 20437 문자열 게임 2

강민승·2023년 6월 8일
0

알고리즘

목록 보기
9/19
post-thumbnail

문제

새로운 문자열 게임이 있다. 게임의 진행 방식은 아래와 같다.

알파벳 소문자로 이루어진 문자열 W가 주어진다.
양의 정수 K가 주어진다.
어떤 문자를 정확히 K개를 포함하는 가장 짧은 연속 문자열의 길이를 구한다.
어떤 문자를 정확히 K개를 포함하고, 문자열의 첫 번째와 마지막 글자가 해당 문자로 같은 가장 긴 연속 문자열의 길이를 구한다.
위와 같은 방식으로 게임을 T회 진행한다.

내 생각

처음 볼 때 딕셔너리를 사용해서 딕셔너리의 value에서 list의 길이가 k 가 되면 그 길이를 구해서 가장 짧은, 가장 긴 글자인지 확인한다.
이 문제를 풀 때 defaultdict으로 푸는 것을 공부했다..!


딕셔너리 사용법!

from collections import defaultdict

# int를 기본 값으로 하는 defaultdict 생성
d = defaultdict(int)

# 존재하지 않는 키에 대해 접근
print(d['key'])  # 출력: 0

# list를 기본 값으로 하는 defaultdict 생성
d = defaultdict(list)

# 존재하지 않는 키에 대해 접근
print(d['key'])  # 출력: []

code

from collections import defaultdict

tc = int(input())
for _ in range(tc):
    s = input()
    k = int(input())
    count = defaultdict(list)
    shortest = float('inf')
    longest = float('-inf')
    no_ans = True

    for i, char in enumerate(s):
        count[char].append(i)
        if len(count[char]) == k:
            length = count[char][-1] - count[char][0] + 1
            shortest = min(shortest, length)
            longest = max(longest, length)
            count[char].pop(0)
            no_ans = False

    if no_ans:
        print(-1)
    else:
        print(shortest, longest)
profile
Step by Step goes a long way. 꾸준하게 성장하는 개발자 강민승입니다.

0개의 댓글