해결한 사람
0
명
정답률
0.00
%
시간 제한
1000
ms
메모리 제한
245
MB
Bear Limak는 프로그래밍 대회의 문제를 준비한다. 물론 문제 설명에 후원사의 이름을 언급하는 것은 전문적이지 못한 일이다. Limak은 이를 심각하게 받아들이고 몇몇 단어를 바꾸려고 한다. 여전히 읽을 수 있도록 각 단어를 가능한 한 적게 수정하려 한다.
Limak에게 영문 대문자로 구성된 문자열 s가 있다. 한 번의 이동으로 문자열에서 인접한 두 글자를 서로 바꿀 수 있다. 예를 들어, 한 번의 이동으로 문자열 "ABBC"를 "BABC" 또는 "ABCB"로 바꿀 수 있다.
Limak은 부분 문자열 "VK"가 없는 문자열을 얻으려고 한다. 즉, 글자 'V' 바로 뒤에 글자 'K'가 오는 경우가 없어야 한다. 어떤 초기 문자열 s에 대해서도 이것이 가능하다는 것은 쉽게 증명할 수 있다.
Limak이 할 수 있는 이동 횟수의 가능한 최솟값은 얼마인가?
입력의 첫 번째 줄에는 문자열의 길이를 나타내는 정수 n (1 ≤ n ≤ 75)가 주어진다.
두 번째 줄에는 영문 대문자로 구성된 문자열 s가 주어진다. 문자열의 길이는 n과 같다.
부분 문자열 "VK"가 없는 문자열을 얻기 위해 Limak이 해야 하는 이동 횟수의 가능한 최솟값을 나타내는 정수 하나를 출력한다.
5
LIMAK
0
20
VKVKVVVKVOVKVQKKKVVK
8
7
VVKEVKK
3
첫 번째 예제에서 초기 문자열은 "VKVK"이다. 가능한 최소 이동 횟수는 3이다. 최적의 이동 순서 중 하나는 다음과 같다.
두 번째 예제에는 최적의 이동 순서가 두 가지 있다. 하나는 "BVVKV" → "VBVKV" → "VVBKV"이다. 다른 하나는 "BVVKV" → "BVKVV" → "BKVVV"이다.
다섯 번째 예제에서는 서로 바꿀 필요가 없다.