- index = 0 부터 palindrome길이 M하면서 str과 str을 뒤집은 string을 비교한다.
- palindrome이 아니면 index++ 해서 다시 탐색한다.
- 못찾을 경우, palindrome을 찾을 때까지 100까지 1,2번 과정을 반복한다.
- 못찾을 경우, 좌 -> 우 방향으로 1,2,3번 과정을 반복한다.
파이썬의 슬라이싱 문법을 잘 활용하지 못했다. str == str[::-1] 하면 뒤집은 값끼리 비교할 수 있는 문법을 너무 돌아갔다.
def checkPalindrome(i, j, M, arr, isCol):
for k in range(0, M // 2 + 1):
if isCol:
if arr[i][j + k] != arr[i][j + M - k - 1]:
return False
else:
if arr[i + k][j] != arr[i + M - k - 1][j]:
return False
if k == M // 2:
return True
T = int(input())
for tc in range(1, T + 1):
result = ""
isChecked = False
N, M = map(int, input().split())
arr = [list(input()) for _ in range(N)]
for i in range(N):
for j in range(N - M + 1):
if checkPalindrome(i, j, M, arr, True):
for l in range(j, j + M):
result += arr[i][l]
isChecked = True
if isChecked:
break
for j in range(N):
for i in range(N - M + 1):
if checkPalindrome(i, j, M, arr, False):
for l in range(i, i + M):
result += arr[l][j]
isChecked = True
if isChecked:
break
print(f'#{tc} {result}')
def is_palindrome(word):
idx = 0
while idx + M - 1 < N:
pali = word[idx:idx + M]
if pali == pali[::-1]:
return pali
idx += 1
return False
for i in range(N):
tmp = ''
for j in range(N):
tmp += arr[j][i]
result = is_palindrome(tmp)
if result:
break
result = is_palindrome(arr[i])
if result:
break
print(f'#{tc} {result}')