코딩테스트/SWEA

[Python, 파이썬] SWEA 1216. [S/W 문제해결 기본] 3일차 - 회문2

알코딩 2024. 10. 16. 00:23

주어진 100x100 평면 글자판에서 가로, 세로를 모두 보아 가장 긴 회문의 길이를 구하는 문제

 

 

def palindrome(word): # 회문인지 확인하는 함수

    N = len(word) // 2

    if(word==word[::-1]): # 데칼코마니 검사
        return True
    
    return False

T = 10 # 테스트케이스 수 10개

for test_case in range(1, T+1):

    test_case = int(input()) # 테스트케이스 번호
    board = [] # 100x100 크기의 글자판
    L = 1 # 찾은 최대 회문의 길이

    # 글자판 입력받기
    for i in range(100):
        board.append(input())

    t_board = [''.join(row) for row in zip(*board)] # 전치한 보드판

    for i in range(100):
        for j in range(99):
            for length in range(2, 100-j+1):

                if(palindrome(board[i][j:j+length])): # 회문이면
                        
                    L = max(L, length) # 최대 회문의 길이 업뎃

                if(palindrome(t_board[i][j:j+length])): # 회문이면
                    L = max(L, length) # 최대 회문의 길이 업뎃


    print("#%d %d" %(test_case, L))
 

 

 

 

[문제풀이]


 

 

swea 1215 문제의 확장판.

그 문제랑 다른 점은 이건 회문의 길이가 정해지지 않아, 2글자부터 N글자 사이를 모두 검사해 회문인지 확인해 최대 회문의 길이를 구해야 한다는 것이다.

for length in range(2, 100-j+1):
 

그래서 이렇게 j글자부터 2글자부터 N글자 사이를 검사하는 length for문을 하나 추가해 회문인지 검사한다.

왜 2글자냐면 어차피 1글자는 회문이 맞기 때문에, 검사를 안해주고 넘어간다.

 

L = max(L, length) # 최대 회문의 길이 업뎃
 
 

그래서 회문인게 발견되면 저장한 최대 회문의 길이와 검사해서 더 큰 길이로 업뎃한다.