[SW Expert Academy, SWEA 2007] 패턴 마디의 길이 (python)
Problem Solving/SWEA

[SW Expert Academy, SWEA 2007] 패턴 마디의 길이 (python)

728x90

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=2&contestProbId=AV5P1kNKAl8DFAUq&categoryId=AV5P1kNKAl8DFAUq&categoryType=CODE&problemTitle=&orderBy=FIRST_REG_DATETIME&selectCodeLang=ALL&select-1=2&pageSize=10&pageIndex=1

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com


※ SW Expert 아카데미의 문제를 무단 복제하는 것을 금지합니다.

728x90

내 생각

테스트 케이스가 부족한 문제 같다.

처음 제출한 코드에 'samsamsungsamsamsungsamsamsung' 같은 문자열을 넣으면, 답이 10이 나와야 하는데 앞의 'samsam'까지만 확인하고 3을 출력하는 코드를 제출해도 Pass가 나온다.

문제의 댓글을 보다가 이런 케이스가 있을 수 있겠구나 알게 되어서 위 같은 경우 10을 출력할 수 있는 코드를 다시 짰다.

처음 제출한 코드(Pass 나오긴 함)

T = int(input())

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

    for i in range(1, 11):
        if s[:i] == s[i:i+i]:
            print("#{} {}".format(test_case, i))
            break

다시 짠 코드

T = int(input())

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

    for i in range(1, 11):
        if s[:i] == s[i:i+i]:
            #위 마디가 반복하는게 맞는지 확인
            is_repeat = True
            for m in range(i, len(s)):
                #반복하는게 맞다면 배수 자리에 항상 같은 문자열이 와야함.
                if s[m % i] != s[m]:
                    is_repeat = False
                    break

            if is_repeat:       
                print("#{} {}".format(test_case, i))
                break
728x90