숫자판에 있는 숫자를 총 다섯 번 이동하여 총 숫자 6자리 만드는 것. 대신 지나온 숫자는 다 지나갈 수 있다고 할 때 깊이 우선 탐색을 이용해 코드를 짜보았다.
nmap = [list(map(str, input().split())) for _ in range(5)]
def dfs(x,y,path):
if len(path) == 6:
if path not in result:
result.append(path)
return
# 상하좌우 이동 방향 정의
directions = [(0, 1), (0, -1), (1, 0), (-1, 0)]
for dr, dc in directions:
new_row, new_col = x + dr, y + dc
if 0 <= new_row < 5 and 0 <= new_col < 5:
dfs(new_row, new_col, path + nmap[new_row][new_col])
result = []
for i in range(5):
for j in range(5):
dfs(i,j,nmap[i][j])
print(len(result))
위 코드에서 신경써야 하는 부분은
숫자판을 문자열로 받아야한다는 점과
지나간 길을 path 인자로 받아 하나씩 문자열을 추가해 6자리 수가 만들어지면 함수 밖의 result에 추가해야 한다는 점이다.
이 부분을 생각 못 하고 계속 함수 안에서 nmap[new_row][new_col] 으로 path.append()를 하고 함수 밖에 result에 저장할 생각을 못 해서 이상하게 됐었다.
하지만 다른 분의 블로그 게시물을 참고해서 코드를 수정해 문제 해결
참고 블로그: https://claude-u.tistory.com/433