2007. 패턴 마디의 길이

zz·2023년 4월 5일
0

SWEA

목록 보기
1/1

[2007. 패턴 마디의 길이]

[제약 사항]

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

[입력]

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

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

[출력]

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

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

[예시]

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

내 풀이

for test_case in range(1, T + 1):
    #print("testcase: ", test_case)  
    inputval = input()
    # input에서 한줄을 인식해온다 - KOREAKOREAKOREAKOREAKOREAKOREA
    for i in range(1, 11):
    # range에서 0을 포함하지 않은 이유는 
        if inputval[ : i ] == inputval[ i : i * 2 ] :    
        # 하나의 패턴이 그 다음에도 반복된다면
            if (inputval[:i] * (len(inputval)/i) == inputval):
            #그리고 이 패턴이 문자열 끝까지 이어진다면
                print("#"+test_case+ " " + i )
                # 이 숫자가 문자열 중 가장 짧은 패턴일것이기 때문에 바로 break
                break

라고 작성했는데 계속 runtime error 가 나타났다 SWEA 플랫폼은 처음이라 잘 모르겠어서 일단 여기에 글로써 남겨둔다
다른 사람들의 풀이도 검색해봤는데 내 풀이와 큰 차이가 없었고..? 당황스럽네

다른 사람 풀이

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]		# 다음 패턴 입력
        if i!=0 and pattern == next_pattern :	# 다음 패턴과 이번 패턴이 같은경우
            ans = len(pattern)			# 길이 출력
            break
    print('#{} {}'.format(tc, ans))

흠 다시 봐도 내거랑 크게 다르지 않다 심지어 이 사람은 내가 추가로 고려해줬던 두번째 if 문에 해당하는 경우에 대한 예외사항을 체크하지 않았다
ex. aaaacaaaac의 경우에는 aaaac가 한 마디이므로 5가 되어야하는데, 이 코드대로 한다면 1을 리턴할 것이기 때문이다

아직은 왜 틀렸는지 잘 모르겠어서.. 일단은 여기에 적어두겠다
D2에 해당하는 문제여서 금방 풀었는데 컴파일은 되고 결과가 나오지 않아 당황스러울 뿐

profile
응애 나 애기개발자

0개의 댓글