Algorithm/Simulation

[Python] SWEA 1216번 회문2

코딩쪼앙 2023. 5. 15. 21:31

문제

 

SW Expert Academy

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

swexpertacademy.com

문제 풀이

  • 회문의 길이를 제일 큰 값(100)부터 1까지 돌리면서 회문인지 체크하고, 회문이라면 바로 출력하고 종료한다.
  •  회문인지 검사하기 위해 가로 세로 값을 바꾼 새로운 리스트 선언하여 가로 회문 찾는 함수에 넣어 가로, 세로 순으로 된 두 배열 중 하나라도 회문이라면 회문길이 i를 형식에 맞게 출력한다.
  • 출력 한 후, 종료 해야하므로 꼭  break한다,

코드

# 제일 긴 가로 회문 구하기
def get_longest_palindrome(word_len,array):
    for i in range(n_len):
        for j in range(n_len - word_len + 1):
            # 양 끝의 문자가 동일하다면
            if array[i][j] == array[i][j+word_len-1]:
                # 안쪽도 동일한지 검사
                for k in range(1,word_len//2):
                    if array[i][j+k] != array[i][j+word_len-1-k]:
                        break
                else:
                    return True
    return False


# 제일 긴 회문 길이 구하기
for tc in range(10):
    n = int(input())
    n_len = 100
    s = [list(input()) for _ in range(n_len)]
    # 세로 기준으로 리스트 저장
    height_s = [''.join(x) for x in zip(*s)]
    for i in range(n_len, -1, -1):
        if get_longest_palindrome(i,s) or get_longest_palindrome(i,height_s):
            print(f'#{tc + 1}',i)
            break