거꾸로 읽어도 똑같은 문장이나 낱말을 회문(回文, palindrome)이라 한다.
8x8 평면 글자판에서 제시된 길이를 가진 회문의 개수를 구하는 문제.
def palindrome(word): # 회문인지 확인하는 함수
N = len(word) // 2
for i in range(N):
if(word[i]!=word[-(i+1)]): # 데칼코마니 검사
return False
return True
T = 10 # 테스트케이스 수 10개
for test_case in range(1, T+1):
length = int(input()) # 회문의 길이
board = [] # 8x8 크기의 글자판
answer = 0 # 찾은 회문의 개수
# 글자판 입력받기
for i in range(8):
board.append(list(input().strip()))
transpose_board = list(zip(*board))
N = 8-length+1 # 반복변수
for i in range(8):
for j in range(N):
if(palindrome(board[i][j:j+length])): # 회문이면
answer += 1 # 회문 +1
if(palindrome(transpose_board[i][j:j+length])): # 회문이면
answer += 1 # 회문 +1
print("#%d %d" %(test_case, answer))
[문제풀이]
회문이란 결국 데칼코마니인지 검사하면 된다.
행과 열을 모두 검사해야 하므로 전치행렬로 만들어 원 행렬 전치 행렬 각각 검사한다.
transpose_board = list(zip(*board))
이때 데칼코마니 검사는 음수 인덱스를 사용하였다.
for i in range(N):
if(word[i]!=word[-(i+1)]): # 데칼코마니 검사
return False
return True
앞 인덱스와 그에 대치되는 위치의 음수 인덱스의 값이 모두 같을 경우 회문이고, 하나라도 틀릴 시 아웃!
'코딩테스트 > SWEA' 카테고리의 다른 글
| [Python, 파이썬] SWEA 1220. [S/W 문제해결 기본] 5일차 - Magnetic (2) | 2024.10.16 |
|---|---|
| [Python, 파이썬] SWEA 1225. [S/W 문제해결 기본] 7일차 - 암호생성기 (0) | 2024.10.16 |
| [Python, 파이썬] SWEA 5215. 햄버거 다이어트 (1) | 2024.10.16 |
| [Python, 파이썬] SWEA 1860. 진기의 최고급 붕어빵 (2) | 2024.10.15 |
| [Python, 파이썬] SWEA 1289. 원재의 메모리 복구하기 (1) | 2024.10.15 |