JJOOII 2

시간 제한2초메모리 제한512 MB

요약
J, O, I로 이루어진 문자열과 레벨 K가 주어질 때, 양끝 또는 중간에서 문자를 지워 K개의 J, K개의 O, K개의 I 순서 문자열을 만들면서 중간 삭제 횟수를 최소화한다.
난이도

보통10점 중 6점

유형
그리디, 투 포인터, 문자열, 누적 합
정답자
아직 제출이 없습니다

문제

Bitaro는 생일 선물로 길이 NN의 문자열 SS를 받았다. SS는 J, O, I 세 종류의 문자로 이루어져 있다.

양의 정수 KK에 대해, KK개의 J, KK개의 O, KK개의 I가 이 순서대로 이어붙은 문자열을 레벨 KK의 JOI 문자열이라고 한다. 예를 들어 JJOOII는 레벨 2의 JOI 문자열이다.

Bitaro는 레벨 KK의 JOI 문자열을 좋아하기 때문에, 다음 세 연산을 원하는 횟수만큼 원하는 순서로 사용해 SS에서 레벨 KK의 JOI 문자열을 만들려고 한다.

  • 연산 1 SS의 첫 번째 문자를 지운다.
  • 연산 2 SS의 마지막 문자를 지운다.
  • 연산 3 SS의 첫 번째도 마지막도 아닌 문자를 지운다.

연산 3은 시간이 많이 걸리므로, Bitaro는 연산 3을 가능한 한 적게 사용해 레벨 KK의 JOI 문자열을 만들고 싶어 한다.

길이 NN의 문자열 SS와 양의 정수 KK가 주어질 때, SS에서 레벨 KK의 JOI 문자열을 만들기 위해 필요한 연산 3의 최소 횟수를 출력하는 프로그램을 작성하라. 연산만으로 레벨 KK의 JOI 문자열을 만들 수 없다면 −1-1을 출력한다.

입력

표준 입력에서 다음 데이터를 읽는다. NN과 KK는 정수이다. SS는 문자열이다.

N K
S

출력

표준 출력에 한 줄을 출력한다. SS에서 레벨 KK의 JOI 문자열을 만들기 위해 필요한 연산 3의 최소 횟수를 출력한다. 레벨 KK의 JOI 문자열을 만들 수 없다면 −1-1을 출력한다.

제한

  • 3≤N≤200 0003 \le N \le 200\,000.
  • 1≤K≤N/31 \le K \le N/3.
  • SS는 J, O, I로 이루어진 길이 NN의 문자열이다.

예제3

  1. 예제 1

    입력
    10 2
    OJIJOIOIIJ
    
    예상 출력
    2
    
  2. 예제 2

    입력
    9 3
    JJJOOOIII
    
    예상 출력
    0
    
  3. 예제 3

    입력
    9 1
    IIIOOOJJJ
    
    예상 출력
    -1