만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

ABC 문자열

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

요약
A, B, C가 같은 개수로 들어 있는 문자열을 부분수열로 나눕니다. 각 부분수열을 연속된 세 글자씩 묶었을 때 모든 묶음에 세 문자가 하나씩 들어가야 하며, 부분수열의 최소 개수를 구합니다.
난이도

어려움10점 중 8점

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

문제

A, B, C 문자로 이루어진 문자열 ss가 주어진다. ss에는 A, B, C가 각각 같은 개수만큼 들어 있다.

문자열이 아름다운 문자열이려면 다음 두 조건을 모두 만족해야 한다.

  • 길이가 33의 배수이다.
  • 길이 33인 연속된 부분 문자열로 빈틈없이 나눌 수 있고, 각 부분 문자열에 A, B, C가 하나씩 순서에 상관없이 들어 있다.

예를 들어 ABCCBA는 아름다운 문자열이지만, ABCAB와 CCBAAB는 아니다.

주어진 문자열을 부분 수열(연속일 필요는 없음)로 나누어, 각 부분 수열이 아름다운 문자열이 되도록 한다. 예를 들어 문자열 ABACBCAACCBB는 다음과 같이 나눌 수 있다.

AB   CA C B
  ACB  A C B

이 경우 부분 수열은 ABCACB와 ACBACB 두 개이며, 둘 다 아름다운 문자열이다. 입력이 제약을 만족하면 이런 분할은 항상 하나 이상 존재한다.

각 부분 수열이 아름다운 문자열이 되도록 나눌 때, 부분 수열의 최소 개수를 구하라.

입력

첫째 줄에 문자열 ss가 주어진다 (3≤∣s∣≤3⋅1053 \le |s| \le 3 \cdot 10^5). ∣s∣|s|는 33의 배수이며, ss에는 A, B, C가 같은 개수만큼 들어 있다.

출력

ss를 아름다운 부분 수열들로 나눌 때 필요한 부분 수열의 최소 개수를 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    ABACBCAACCBB
    
    예상 출력
    2