SWEA

[SWEA] 2007 : 패턴 마디의 길이 (Python/파이썬)

sson-coding 2025. 11. 19. 22:25

문제 링크

https://swexpertacademy.com/main/code/problem/problemDetail.do

문제

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

[제약 사항]

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

입력

가장 첫 줄에는 테스트 케이스의 개수 T가 주어지고, 그 아래로 각 테스트 케이스가 주어진다.

각 테스트 케이스의 첫 번째 줄에는 길이가 30인 문자열이 주어진다.

출력

출력의 각 줄은 '#t'로 시작하고, 공백을 한 칸 둔 다음 정답을 출력한다.

(t는 테스트 케이스의 번호를 의미하며 1부터 시작한다.)

예제

입력

3       
KOREAKOREAKOREAKOREAKOREAKOREA
SAMSUNGSAMSUNGSAMSUNGSAMSUNGSA
GALAXYGALAXYGALAXYGALAXYGALAXY     
 

출력

#1 5
#2 7
#3 6
 

정답 및 풀이

t = int(input())

for tc in range(t):
    s = input()

    pattern=s
    for i in range(1,len(s)):
        if s[0:i] == s[i:i+i]:
            pattern=s[0:i]
            break
    print(f'#{tc+1} {len(pattern)}')

  1. t = int(input())
    • 테스트 케이스 개수를 입력받는다.
  2. for tc in range(t): s = input()
    • 각 테스트 케이스마다 문자열 s를 입력받는다.
  3. pattern = s
    • 기본 패턴을 문자열 전체로 설정한다.
    • 만약 작은 마디를 찾으면 그걸로 교체한다.
  4. for i in range(1, len(s)):
    • 패턴 후보 길이를 1부터 문자열 길이-1까지 증가시키며 검사한다.
  5. if s[0:i] == s[i:i+i]:
    • s[0:i] : 첫 번째 패턴 후보
    • s[i:i+i] : 바로 뒤에 이어지는 동일 길이의 부분 문자열
    • 두 부분이 같다면 패턴이 반복된 것으로 판단한다.
  6. pattern = s[0:i] break
    • 반복 패턴을 찾았으므로 정답 패턴을 갱신하고 반복을 종료한다.
  7. print(f'#{tc+1} {len(pattern)}')
    • 찾아낸 패턴의 길이를 출력한다.