바나나나빠나나

B, A, N으로 이루어진 문자열이 주어질 때, B+ANANA(NA)* 형태 블록의 연결로 만들기 위해 바꿔야 하는 문자의 최소 개수를 구한다.

보통6동적 계획법문자열구현그리디면접 대비아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

'유사 바나나'는 다음 규칙으로 정의된다.

  • BANANABANANA는 유사 바나나이다.
  • 유사 바나나 XX에 대하여 BB를 앞에 붙인 BXBX도 유사 바나나이다.
  • 유사 바나나 XX에 대하여 NANA를 뒤에 붙인 XNAXNA도 유사 바나나이다.

따라서 모든 유사 바나나는 BaANANA(NA)tB^{a}ANANA(NA)^{t} 꼴이며, 여기서 aa는 1 이상, tt는 0 이상의 정수이다. 길이는 a+5+2ta + 5 + 2t이다.

'유사 바나나 문자열'은 유사 바나나를 하나 이상 이어 붙인 문자열이다. 즉 BB가 하나 이상 나오는 구간으로 시작하여 ANANAANANA를 거치고, 이어서 NANA가 반복될 수 있는 조각이 하나 이상 연결된 형태이다. BB, AA, NN으로 이루어진 문자열이 주어질 때, 각 위치의 문자를 바꾸어 유사 바나나 문자열로 만드는 데 필요한 바꿈 횟수의 최솟값을 구하라.

입력

길이가 MM인 문자열 SS가 한 줄로 주어진다. SSBB, AA, NN 세 종류의 문자로만 이루어져 있다. MM은 6 이상 100000 이하이다.

출력

주어진 문자열을 유사 바나나 문자열로 바꾸는 데 필요한 문자 바꿈 횟수의 최솟값을 한 줄로 출력한다. 길이가 6 이상인 모든 입력에 대하여 도달 가능한 유사 바나나 문자열이 존재하므로, 항상 답이 존재한다.

힌트

하나의 유사 바나나는 BB가 하나 이상 오고, 그 뒤에 ANANAANANA가 오고, 그 뒤에 NANA가 0번 이상 반복되는 형태이다. 전체 문자열은 이러한 조각이 끝없이 이어진 것으로 볼 수 있으며, 조각이 끝나는 지점에서는 다음 조각의 첫 문자 BB와 꼬리 부분의 NN 중 하나가 올 수 있다.

이 구조는 상태가 8개인 결정적 유한 오토마톤으로 나타낼 수 있다. 입력 문자열을 이 오토마톤에 맞추는 과정은 각 위치에서 각 상태로 도달하는 최소 바꿈 횟수를 갱신하는 동적 프로그래밍으로 풀 수 있다.