아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

단어

시간 제한1초메모리 제한128 MB

요약
길이 n인 단어가 주어질 때, k개 이하의 위치에서만 다른 단어가 가질 수 있는 최소 블록 수를 구한다.
난이도

보통10점 중 7점

유형
동적 계획법, 문자열
정답자
아직 제출이 없습니다

문제

단어는 영어 대문자로 이루어진 수열이다. 단어의 길이는 그 안에 들어 있는 글자의 개수이다. 예를 들어 단어 α\alpha = ABAACBBBA의 길이는 99이다.

단어 안의 블록은 같은 글자가 이어지는 극대 구간이다. 어떤 단어가 정확히 tt개의 블록으로 이루어져 있으면 그 단어를 tt-hard라고 부른다. 위의 단어 α\alpha는 A | B | AA | C | BBB | A의 66개 블록으로 나뉘므로 66-hard이다.

길이가 같은 두 단어는 서로 얼마나 다른지 비교할 수 있다. 길이가 nn인 두 단어가 정확히 kk개의 위치 ii (1≤i≤n1 \le i \le n)에서, 즉 첫째 단어의 ii번째 글자와 둘째 단어의 ii번째 글자가 서로 다를 때, 두 단어를 kk-different라고 한다. 예를 들어 α\alpha와 β\beta = AAAABBBBB는 33-different이다.

주어진 단어 α\alpha에 대해, α\alpha와 너무 다르지 않으면서도 가능한 한 단순한 단어 β\beta를 구하려 한다. β\beta가 얼마나 단순해질 수 있는지가 문제이다.

nn, kk, 그리고 길이가 nn인 단어 α\alpha를 입력받아, α\alpha와 많아야 kk개의 위치에서만 다른 tt-hard 단어 β\beta가 존재하도록 하는 가장 작은 tt를 구하는 프로그램을 작성하라. 그 tt의 값을 출력한다.

입력

첫째 줄에 두 정수 nn과 kk가 공백 하나로 구분되어 주어진다 (1≤n≤10001 \le n \le 1000, 0≤k≤n0 \le k \le n). 각각 단어 α\alpha의 길이와 허용되는 서로 다른 위치의 개수를 뜻한다. 둘째 줄에는 단어 α\alpha를 이루는 정확히 nn개의 대문자가 주어진다.

출력

tt의 최솟값을 나타내는 정수 하나를 출력한다.

예제3

  1. 예제 1

    입력
    9 3
    ABAACBBBA
    
    예상 출력
    2
    
  2. 예제 2

    입력
    9 0
    ABAACBBBA
    
    예상 출력
    6
    
  3. 예제 3

    입력
    5 2
    AAAAA
    
    예상 출력
    1