자주 나오는 단어

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

요약
각 줄에서 공백을 제거한 뒤 길이 1, 2, 3, ...의 부분 문자열 중 가장 많이 나타난 횟수를 구하고, 반복이 없는 길이에 이르면 멈춘다.
난이도

보통10점 중 5점

유형
문자열, 해시맵, 구현, 문자열 매칭
정답자
아직 제출이 없습니다

문제

영어에서 THE는 가장 흔한 세 글자 단어다. 이 글자들은 다른 단어 속에도 나타나는데, 예를 들어 "other"나 "mathematics"가 그렇고, "not here"처럼 두 단어에 걸쳐 숨어 있기도 하다. 그렇다면 세 글자가 아닌 다른 길이에서는 어떤 단어가 가장 흔할까?

텍스트가 하나 주어진다. 공백을 모두 무시하면 각 줄은 대문자 알파벳이 이어진 하나의 문자열이 되며, 이 문자열에서 연속한 kk개의 글자를 길이 kk인 단어라고 부른다(단어끼리 겹쳐도 된다). 먼저 길이가 11인 단어 중 가장 많이 나오는 것을 하나 고르고, 그것이 두 번 이상 나오면 나온 횟수를 출력한다. 이어서 길이 22, 33, 그리고 그다음 길이에 대해서도 같은 과정을 반복하며, 어떤 단어도 두 번 이상 나오지 않는(모두 한 번씩만 나오는) 길이에 도달하면 멈춘다.

입력

입력은 여러 줄로 이루어진다. 마지막 줄은 비어 있으며 처리하지 않는다. 마지막 줄을 제외한 각 줄은 대문자 알파벳과 공백으로 이루어진 11자 이상 10001000자 이하의 문자열이다. 공백은 의미가 없으므로 무시한다.

출력

각 입력 줄마다, 길이 11, 22, 33, ...인 단어의 등장 횟수를 한 줄에 하나씩 출력한다. 어떤 단어도 두 번 이상 나오지 않는 길이에 도달하면 빈 줄을 하나 출력하고, 그 입력 줄에 대해서는 더 이상 아무것도 출력하지 않으며, 다음 입력 줄로 넘어간다.

예제1

  1. 예제 1

    입력
    OTHER MATHEMATICS NOT HERE
    AA
    
    
    예상 출력
    4
    3
    3
    2
    2
    
    2