[SWEA] 1215 : 회문1 - Python

Chooooo·2023년 11월 10일
0

알고리즘/백준

목록 보기
118/182

문제

"기러기", "토마토", "스위스"와 같이 똑바로 읽어도 거꾸로 읽어도 똑같은 문장이나 낱말을 회문(回文, palindrome)이라 한다.

8x8 평면 글자판에서 제시된 길이를 가진 회문의 개수를 구하라.

위와 같은 글자판이 주어졌을 때, 길이가 5인 회문은 붉은색 테두리로 표시된 4개이므로 4를 반환하면 된다.

[제약 사항]

각 칸의 들어가는 글자는 'A', 'B', 'C' 중 하나이다.

ABA도 회문이며, ABBA도 회문이다. A 또한 길이 1짜리 회문이다.

가로 또는 세로로 이어진 회문의 개수만 센다.

아래 그림에서 노란색 경로를 따라가면 길이 7짜리 회문이 되지만 직선이 아니기 때문에 인정되지 않는다.

[입력]

총 10개의 테스트 케이스가 주어진다.

각 테스트 케이스의 첫 번째 줄에는 찾아야 하는 회문의 길이가 주어지며, 다음 줄에 8x8 크기의 글자판이 주어진다.

[출력]

#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 찾은 회문의 개수를 출력한다.

import sys
sys.stdin = open("input.txt", "rt")

def palindrome(length, data):
    cnt = 0
    for i in range(8):
        for j in range(8):
            if j + length > 8:
                break
            # 가로
            tmp = data[i][j:j+length]
            if tmp == tmp[::-1]:
                cnt += 1
            # 세로
            temp = []
            for k in range(length):
                temp.append(data[j+k][i])
            if temp == temp[::-1]:
                cnt += 1
    return cnt


T = 10
for t in range(1,T+1):
    length = int(input()) # 찾아야 하는 회문의 길이
    data = [list(input()) for _ in range(8)]
    # 회문 찾기
    cnt = palindrome(length, data)
    print(f"#{t} {cnt}")

코멘트

전형적인 파이썬 회문 활용. 이런 건 암기해도 굿

profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글