아마 문자열 규칙을 전체 탐색하는 부분에 대해 오래 고민했을 것입니다. 이 내용을 좀 더 자세하게 살펴볼게요.
‘전체 탐색’의 핵심은 원하는 값을 모든 범위에서 조사하는 것입니다. 이번 문제에서 전체 탐색의 핵심은 ‘몇 개로 자른 문자열로 압축하면 가장 좋은 효율을 보이는가’입니다. 중간중간 문자열의 개수를 바꿔가면서 이 부분은 2개로, 저 부분은 4개로 문자열을 쪼개 압축했을 때 가장 큰 효율을 보이는지 확인하는 문제가 아닙니다. 따라서 1글자부터 전체 길이의 절반까지 문자열을 전체와 비교해보면서 겹치는 부분이 몇 번 있는지 센 다음, 겹쳐서 단축된 문자열의 길이가 가장 짧은 경우를 구해야 합니다.
for x in range(1, len(s) // 2 + 1):
…
for i in range(0, len(s) + 1, x):
…
즉, 첫 글자부터 전체 문자열의 절반까지 진행하는 것이 첫 번째 루프, 전체 문자열과 현재 규칙의 글자수만큼 진행하면서 비교하는 것이 두 번째 루프에서 하는 일입니다.