728x90
number_set = set()
matrix = [list(map(int, input().split())) for _ in range(5)]
delta = [(-1,0),(1,0),(0,-1),(0,1)]
def backtrack(x,y, index=0, string=''):
if index == 5:
number_set.add(string)
else:
for i in range(4):
dx = x + delta[i][0]
dy = y + delta[i][1]
if 0 > dx or 5 <= dx or 0 > dy or 5 <= dy: continue
backtrack(dx, dy, index+1, string+str(matrix[dx][dy]))
for i in range(5):
for j in range(5):
backtrack(i,j,0, str(matrix[i][j]))
print(len(number_set))
백트래킹(dfs)로 쉽게 풀었다.
총 여섯자리의 조합을 만들면되는데 중복이 될수 있으므로 set으로 만들었다.
처음 시작 부분은 반복문을 사용해서 집어 넣고 나머지 다섯자리는 백트래킹을 사용하여 조합을 만들었다.
여섯자리를 다 만들면 set에 넣고, 모든 시작점에서 조합이 끝나면 그때 길이를 재면된다.
실버 문제중엔 꽤 쉬운 문제이다.
근데 C로 풀으라고 하면 풀수있을지 모르겠다.
'STUDY > Algorithm' 카테고리의 다른 글
[백준] 7562 나이트의 이동 python (0) | 2021.03.29 |
---|---|
[백준] 1941 소문난 칠공주 python (0) | 2021.03.29 |
[백준] 12851 숨바꼭질 2 python (0) | 2021.03.29 |
[백준] 1697 숨바꼭질 python (0) | 2021.03.29 |
[백준] 2660 회장뽑기 python (0) | 2021.03.28 |