문제
5×5 크기의 숫자판이 있다. 각각의 칸에는 숫자(digit, 0부터 9까지)가 적혀 있다. 이 숫자판의 임의의 위치에서 시작해서, 인접해 있는 네 방향으로 다섯 번 이동하면서, 각 칸에 적혀있는 숫자를 차례로 붙이면 6자리의 수가 된다. 이동을 할 때에는 한 번 거쳤던 칸을 다시 거쳐도 되며, 0으로 시작하는 000123과 같은 수로 만들 수 있다.
숫자판이 주어졌을 때, 만들 수 있는 서로 다른 여섯 자리의 수들의 개수를 구하는 프로그램을 작성하시오.
입력
다섯 개의 줄에 다섯 개의 정수로 숫자판이 주어진다.
출력
첫째 줄에 만들 수 있는 수들의 개수를 출력한다.
간단한 dfs 문제로서 크게 고민하지 않아도 된다. n도 5로 매우 작아서 완전탐색이라고도 할 수 있다.
import sys
sys.setrecursionlimit(10**6)
board = []
n = 5
for _ in range(n):
board.append([*map(int, input().rstrip().split(" "))])
answer = set()
def dfs(x, y, string):
global answer, board, n
if(len(string) == 6):
answer.add(string)
return
for a, b in [(-1, 0), (1, 0), (0, -1), (0, 1)]:
if(x+a >= 0 and y+b >= 0 and x+a < n and y+b < n):
dfs(x+a, y+b, string+str(board[x+a][y+b]))
for i in range(5):
for j in range(5):
dfs(i, j, str(board[i][j]))
print(len(answer))
'개발 > 알고리즘' 카테고리의 다른 글
[BOJ] 2644 촌수계산 (0) | 2020.10.24 |
---|---|
[BOJ] 11725 트리의 부모 찾기 (0) | 2020.10.24 |
[BOJ] 17141 연구소2 파이썬 (0) | 2020.10.21 |
[BOJ] 치킨배달 파이썬 (0) | 2020.10.20 |
[BOJ] 18352 특정한 거리의 도시 찾기 (0) | 2020.10.19 |