[SWEA] 2007. 패턴 마디의 길이

Hyerin·2022년 11월 8일
0

SWEA

목록 보기
9/13

문제

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

[제약 사항]

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

[입력]

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

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

3       
KOREAKOREAKOREAKOREAKOREAKOREA
SAMSUNGSAMSUNGSAMSUNGSAMSUNGSA
GALAXYGALAXYGALAXYGALAXYGALAXY

[출력]

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

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

#1 5
#2 7
#3 6

T = int(input())

for test_case in range(1, T + 1):
    a = list(input())
    s = 0
    answer = 0
    
    for j in range(1, 10):
        if a[0] != a[j] or a[1] != a[j +1]:
            s += 1
        else:
            break

    answer = s + 1
    print("#%d" %test_case, answer)

a리스트의 0번 인덱스값과 1번 인덱스값이 다르거나, 1번 인덱스값과 2번 인덱스값이 다를 경우에 s(마디길이) 증가시킨다.
0번 인덱스값을 더해야하므로 answer = s + 1


<다른 풀이>

T = int(input())

for tc in range(1, T+1):
    
    text = input()
    pattern =[]
    next_pattern=[]
    ans = 0
    for i in range(11):					# 마디의 최대 길이가 10이므로 range(11)
        pattern = text[:i]				# patten리스트에 패턴 입력
        next_pattern = text[i:i*2]		# 다음 패턴 입력
        #print(pattern)
        #print(next_pattern)
        if i!=0 and pattern == next_pattern :	# 다음 패턴과 이번 패턴이 같은경우
            ans = len(pattern)			# 길이 출력
            break
    print('#{} {}'.format(tc, ans))

pattern에 0번 인덱스값부터 i번 인덱스값까지 넣는다.
next_pattern에 i+1번 인덱스값부터 i*2(i길이의 값)번 인덱스값까지 넣는다.
pattern과 next_pattern을 비교한다.

profile
DevOps, 코딩 기록

0개의 댓글