팰린드롬 인코딩

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

요약
이진 문자열에서 길이가 짝수인 회문 부분 문자열의 뒤쪽 절반을 반복해서 지워 얻을 수 있는 최소 길이를 구하는 문제입니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 문자열, 문자열 매칭, 재귀
정답자
아직 제출이 없습니다

문제

준규는 이진 문자열을 짧게 만드는 인코딩 규칙을 만들었다.

이 인코딩은 0과 1로만 이루어진 문자열에 적용한다. 한 번의 연산은 다음과 같다.

  1. 현재 문자열에서 길이가 짝수인 팰린드롬 부분 문자열을 하나 고른다. 팰린드롬은 앞에서 읽어도 뒤에서 읽어도 같은 문자열이다.
  2. 고른 부분 문자열의 뒤쪽 절반을 지운다. 예를 들어 0110을 고르면 뒤쪽 절반인 10을 지우고 01만 남긴다.
  3. 더 이상 고를 수 있는 짝수 길이 팰린드롬 부분 문자열이 없을 때까지 원하는 순서로 연산을 반복할 수 있다.

문자열 S가 주어졌을 때, 이 인코딩으로 만들 수 있는 결과 중 가장 짧은 길이를 구하라.

입력

첫째 줄에 0과 1로만 이루어진 문자열 S가 주어진다.

  • 1 <= |S| < 50

출력

첫째 줄에 인코딩으로 만들 수 있는 결과의 최소 길이를 출력한다.

힌트

첫 번째 공개 테스트에서는 뒤쪽의 1001을 고르면 문자열이 01110이 된다. 이어서 11을 고르면 0110이 되고, 마지막으로 0110을 고르면 01만 남아 길이는 2가 된다.

예제3

  1. 예제 1

    입력
    0111001
    
    예상 출력
    2
    
  2. 예제 2

    입력
    0
    
    예상 출력
    1
    
  3. 예제 3

    입력
    01010111100110101110000001011000101000010111000111
    
    예상 출력
    6