728x90

문제

패턴에서 반복되는 부분을 마디라고 부른다. 문자열을 입력 받아 마디의 길이를 출력하는 프로그램을 작성하라.

 

제약 사항

각 문자열의 길이는 30이다. 마디의 최대 길이는 10이다.

 

입력

가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.
각 테스트 케이스의 첫 번째 줄에는 길이가 30인 문자열이 주어진다.

 

출력

출력의 각 줄은 '#t'로 시작하고, 공백을 한 칸 둔 다음 정답을 출력한다.
(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

 

예제

[입력] [출력]
3       
KOREAKOREAKOREAKOREAKOREAKOREA
SAMSUNGSAMSUNGSAMSUNGSAMSUNGSA
GALAXYGALAXYGALAXYGALAXYGALAXY    
#1 5
#2 7
#3 6

 

 

문제 해결 방법

  • 파이썬의 슬라이싱 기능을 이용하여 간단하게 풀 수 있었던 문제였다.
  • 패턴의 길이를 1부터 최댓값(@10@)까지 하나씩 늘려가면서, @S[:pattern_length] == S[pattern_length:pattern_length * 2]@일 때 반복문을 중단하고, 그 때의 패턴의 길이를 출력해주면 된다.

 

코드

T = int(input())

for test_case in range(1, 1 + T):
    S = str(input())

    pattern_length_limit = 10    # 마디의 최대 길이는 10
    answer = 0

    for pattern_length in range(1, pattern_length_limit + 1):
        pattern = S[:pattern_length]
        
        if pattern == S[pattern_length:pattern_length * 2]:
            answer = len(pattern)
            break

    print(f"#{test_case} {answer}")

 

참고

  • 난이도 : D2
728x90