1216 - 회문2

박재현·2022년 2월 17일
0

알고리즘 부수기

목록 보기
30/43
post-thumbnail

문제 설명

링크

문제 풀이

회문 문제와 풀이 과정이 비슷하다. 다만 palindrome의 길이가 정해져있지 않고, 길이의 최댓값을 구하는 것이 목적이다.

  • palindrome을 100부터 max_palindrome까지 줄여나가며 탐색한다.
  • max_palindrome 보다 작은 palindrome은 탐색하지 않고 스킵한다.

코드

MAX_SIZE = 100

def is_palindrome(str):
    if str == str[::-1]:
        return len(str)
    return False

T = 10
for _ in range(1, T+1):
    tc = int(input())
    arr = [list(input()) for _ in range(MAX_SIZE)]
    max_palindrome = 0

    for i in range(MAX_SIZE):
        for palindrome_len in range(MAX_SIZE, max_palindrome, -1):
            if palindrome_len < max_palindrome:
                break
            for startIndex in range(0, MAX_SIZE - palindrome_len + 1):
                tmp = ''
                for j in range(palindrome_len):
                    tmp += arr[i][startIndex + j]
                newPalindrome = is_palindrome(tmp)
                if newPalindrome:
                    max_palindrome = newPalindrome
                    break

        for palindrome_len in range(MAX_SIZE, max_palindrome, -1):
            if palindrome_len < max_palindrome:
                break
            for startIndex in range(0, MAX_SIZE - palindrome_len + 1):
                tmp =''
                for j in range(palindrome_len):
                    tmp += arr[startIndex + j][i]
                newPalindrome = is_palindrome(tmp)
                if newPalindrome:
                    max_palindrome = newPalindrome


    print(f'#{tc} {max_palindrome}')
profile
공동의 성장을 추구하는 개발자

0개의 댓글