STUDY/Algorithm

[백준] 2210 숫자판 점프 python

sinawi95 2021. 3. 29. 21:17
728x90

www.acmicpc.net/problem/2210

 

2210번: 숫자판 점프

111111, 111112, 111121, 111211, 111212, 112111, 112121, 121111, 121112, 121211, 121212, 211111, 211121, 212111, 212121 이 가능한 경우들이다.

www.acmicpc.net

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로 풀으라고 하면 풀수있을지 모르겠다.