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

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

문자열 접기

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

요약
문자열을 여러 위치에서 접어 세로 열로 만든 뒤, 아래에서 시작해 빈틈 없이 이어지면서 한 문자가 반복되는 가장 긴 구간의 길이를 구한다.
난이도

어려움10점 중 8점

유형
문자열, 완전 탐색, 구현, 시뮬레이션
정답자
아직 제출이 없습니다

문제

상도는 문자열을 좋아하고, 문자열에 연산을 적용하는 것을 정말 좋아한다. 오늘 상도가 문자열에 적용할 연산은 "접기"이다.

접기 연산을 수행하려면, 문자열을 접을 위치를 정해야 한다. 위치는 인접한 두 문자의 사이이고, 이 위치를 기준으로 왼쪽 부분 A와 오른쪽 부분 B로 나눈다. 그 다음, B를 뒤집고, A의 위에 뒤집은 문자열 B를 놓는다. A와 B는 접은 위치를 기준으로 줄이 맞춰져 있어야 한다.

아래는 "ABCDEFGHIJK"를 F와 G의 사이에서 접은 예시이다. 위치는 '|'로 표시하면, "ABCDEF|GHIJK"와 같다.

 KJIHG
ABCDEF

오른쪽 부분의 길이는 왼쪽 부분의 길이보다 길 수도 있다. 아래는 "A|BCDEFGHIJK"의 예시이다.

KJIHGFEDCB
         A

문자열을 접는 연산은 여러 번 수행할 수 있다. 아래는 "AB|RACA|DAB|RA"와 "X|XXXXX|X|X|XXXXXX" 를 접은 예시이다.

           XXXXXX
 AR        X
DAB        X
ACAR       XXXXX
  AB           X

문자열을 접으면 새로운 문자열을 만들 수 있다. 새로운 문자열은 문자열을 접은 상태에서 세로 방향으로 만들어야 한다. 문자열의 시작 위치는 항상 가장 아래에 있는 문자가 되어야 하고, 위 방향으로 문자열을 이어 붙여서 새로운 문자열을 만든다. 가장 위에 있는 문자와 가장 아래에 있는 문자의 사이에 문자가 없으면 안 된다."ABCD|EFGH|IJ|K"에서 만들 수 있는 새로운 문자열은 "AHI", "BGJK", "CF", "DE" 이다.

 K
IJ
HGFE
ABCD

"X|XXXXX|X|X|XXXXXX"에서 만들 수 있는 새로운 문자열은 없다. 모든 세로 위치의 문자열이 가장 아래에서 시작하지 않거나, 중간에 공백이 존재하기 때문이다. "A|BCDEFGHIJK"에서 만들 수 있는 새로운 문자열은 "AB", "AB|RACA|DAB|RA"에서 만들 수 있는 새로운 문자열은 "AABR", "BR"이 있다.

문자열 S가 주어진다. S를 적절히 접어서 만들 수 있는 새로운 문자열 중에서, 같은 문자로만 이루어져 있으면서 길이가 가장 긴 것을 구해보자.

입력

첫째 줄에 문자열 S가 주어진다. S는 알파벳 대문자로만 이루어져 있고, 길이는 1,000보다 작거나 같다.

출력

첫째 줄에 문자열 S를 접어서 만들 수 있는 새로운 문자열 중에서, 같은 문자로만 이루어져 있으면서 길이가 가장 긴 것의 길이를 출력한다.

예제3

  1. 예제 1

    입력
    ABRACADABRA
    
    예상 출력
    3
    
  2. 예제 2

    입력
    ABBBCBDB
    
    예상 출력
    3
    
  3. 예제 3

    입력
    AB
    
    예상 출력
    1