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

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

저녁 식사

면접 대비

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

요약
G와 H로 이루어진 줄에서 같은 문자 K개 이상이 연속한 묶음을 반복해 제거할 때, 모두 없애는 최소 묶음 수를 구하고 불가능하면 -1을 출력한다.
난이도

보통10점 중 7점

유형
동적 계획법, 구간, 완전 탐색, 문자열
정답자
아직 제출이 없습니다

문제

저녁을 먹으러 가는 길에, 참가자들이 곱슬 감자튀김을 받기 위해 줄을 서 있다. NN (1≤N≤1001 \le N \le 100)명의 참가자가 식당에 들어가려고 한 줄로 서 있다.

각 참가자는 오직 두 가지 언어 중 하나, 즉 Gnold 또는 Helpfile로만 프로그래밍한다. 프로그래머들은 자신과 다른 언어를 쓰는 사람 옆에 서 있는 것을 싫어하며, 오직 KK (1≤K≤61 \le K \le 6)명 이상으로 이루어진 그룹일 때만 식당에 들어간다.

닥터 V는 다음 과정을 반복한다.

  • 줄에서 같은 언어를 쓰면서 서로 인접해 서 있는 참가자를 KK명 이상 골라, 그 그룹을 저녁 식사에 보낸다.
  • 남은 참가자들은 빈자리를 메우며, 그 결과 같은 언어를 쓰는 참가자들이 서로 붙게 될 수 있다.

처음 줄 상태가 주어질 때, 모든 참가자가 저녁을 먹으러 갈 수 있는가? 갈 수 있다면, 저녁 식사에 보내야 하는 그룹 수의 최솟값은 얼마인가?

입력

첫째 줄에 두 정수 NN과 KK가 주어진다.

둘째 줄에 줄의 맨 앞부터 맨 뒤까지를 나타내는 NN개의 문자가 주어진다. H는 Helpfile 프로그래머를, G는 Gnold 프로그래머를 뜻한다.

출력

저녁 식사에 보내는 그룹 수의 최솟값을 한 줄에 출력한다. 모든 참가자가 저녁을 먹으러 갈 수 없다면 대신 -1을 출력한다.

힌트

예를 들어 일곱 명의 참가자가 GHHGHHG 순서로 서 있고, 두 명 이상씩 그룹을 지어 저녁을 먹으러 간다고 하자. 먼저 앞쪽의 H 두 명을 보내면 GGHHG가 남고, 이어서 남은 H 두 명을 보내면 GGG가 남으며, 마지막으로 G 세 명을 보낸다. 총 세 그룹을 보내게 된다.

예제1

  1. 예제 1

    입력
    7 2
    GHHGHHG
    
    예상 출력
    3