처음 떠올렸던 아이디어는
1. 테스트케이스(10)만큼
2. 찾을 길이(length)를 입력받고
3. board에 8x8이 완성되도록 입력을 우선 받는다.
4. for문을 돌면서 현재 돌아가고있는 위치와(board[a][b]) 그 위치에서 length를 더했을때 똑같은 문자를 발견한다면
5. 새로운 for문을 통해 length만큼 또다시 돌면서 회문인지 확인하는 방식
이 방법으로 한시간 넘게 씨름했는데 반복문만 추가가되고,
결국 5번에서 좋지 않은 방법임이 확실하다고 느껴져서 다시 생각해보았다.
처음 아이디어에서는 한문자를 리스트로 나눠버렸는데(['C','B','C','A']형식으로)
새로 시도했을때는 문자열로 받았다.
문제에서 가로, 세로만 확인하면 되므로 가로 for문, 세로 for문으로 따로 확인하도록 했다.
8개의 가로줄을 확인하면서, 일단 length만큼 잘라서 그 자른 문자열을 새로 선언하고, for문으로 회문인지 확인하도록했다.
for i in range(10):
length = int(input())
board = []
for _ in range(8):
board.append((input()))
tot=0
for a in range(8):
string = board[a]
for b in range(8):
new = string[b:b+length]
cnt=0
if (len(new)) == length:
for c in range(length):
if new[c] == new[-(c+1)]:
cnt+=1
if cnt==length:
tot+=1
board2 = []
for a in range(8):
ap =''
for b in range(8):
ap+=board[b][a]
board2.append(ap)
for a in range(8):
string = board2[a]
for b in range(8):
new = string[b:b+length]
cnt=0
if (len(new)) == length:
for c in range(length):
if new[c] == new[-(c+1)]:
cnt+=1
if cnt==length:
tot+=1
print("#{0} {1}".format(i+1,tot))
내 풀이와 다른 사람의 풀이를 비교해보니, 내가 아직 파이썬의 특징을 정확히 파악해서 써먹으려는것이 매우 부족하다고 느꼈다.
다음에 복습해볼땐 슬라이싱을 사용해봐야겠다.