이번 문제는 깊이우선탐색을 통해 해결하였다. 거쳤던 곳을 다시 방문해도 상관없기 때문에 방문 처리를 따로 하지 않았고, 4방향으로 모두 재귀호출하여 문자열의 길이가 6이 되었을 때 정답 리스트에서의 중복 검사를 거쳐 삽입하는 방식으로 접근하였다.
import sys
sys.setrecursionlimit(10**9)
def dfs(h, w, tmp):
if len(tmp)==6:
if tmp not in nums:
nums.append(tmp)
return
dh = [0, 0, 1, -1]
dw = [1, -1, 0, 0]
for i in range(4):
next_h=h+dh[i]
next_w=w+dw[i]
if next_h>=0 and next_w>=0 and next_h<5 and next_w<5:
dfs(next_h, next_w, tmp+pad[next_h][next_w])
pad=[]
for _ in range(5):
pad.append(list(map(str, input().split())))
nums=[]
for i in range(5):
for j in range(5):
dfs(i, j, pad[i][j])
print(len(nums))