💡문제접근

  • 재귀를 이용하여 숫자판을 지나다니면서 만들어지는 숫자의 길이가 6자리가 되면 리스트에 해당 숫자가 있는지를 확인한 후에 없으면 추가하고 있으면 넣지 않는 방식을 이용했다. 또한 이 문제는 왔던 곳을 다시 지나갈 수 있으므로 방문 여부를 따지는 배열이 필요하지 않다.

💡코드(메모리 : 31256KB, 시간 : 644ms)

import sys
input = sys.stdin.readline
sys.setrecursionlimit(10**6)

def DFS(x, y, number):
    number += graph[y][x]

    if len(number) == 6:
        if number not in result:
            result.append(number)
        return
    dx = [-1, 0, 1, 0]
    dy = [0, 1, 0, -1]
    for i in range(4):
        nx = x + dx[i]
        ny = y + dy[i]
        if nx < 0 or nx >= 5 or ny < 0 or ny >= 5:
            continue
        if 0 <= nx < 5 and 0 <= ny < 5:
            DFS(nx, ny, number)

graph = []
for i in range(5):
    graph.append(list(map(str, input().strip().split())))

result = []
for i in range(5):
    for j in range(5):
        k = DFS(i, j, '')
print(len(result))

💡소요시간 : 20m

0개의 댓글