dy = [1, 1, -1, -1] dx = [1, -1, -1, 1] def dfs(y, x, s, cnt, dessert): global answer for i in range(s, 4): # 사각형 모향의 방향은 오직 네가지만 나온다. 따라서 이전에 갔던 방향은 고려하지 않는다. ny = y + dy[i] # 다음 대각선 nx = x + dx[i] if 0 <= ny < n and 0 <= nx < n and visited[ny][nx]: # 다음에 갈 곳이 범위 안에 있고 방문한 곳이 아니면 if cafe[ny][nx] in dessert: # 만약 같은 숫자의 디저트 파는 곳이라면 ? if visited[ny][nx] == 2: # 근데 그게 출발지이고, 최소 4곳 다녀왔다면 ? answer = max(answer, cnt) # 더 많은 디저트 수로 갱신 return continue # 출발지 아니고 그냥 겹치는 경우라면 넘어가도록 visited[ny][nx] = 0 # 방문 처리 dfs(ny, nx, i, cnt+1, dessert + [cafe[ny][nx]]) # 다음 갈 곳 들어가봐 visited[ny][nx] = 1 # 다음 사용을 위해 방문처리 해제 tc = int(input()) for idx in range(1, tc+1): n = int(input()) # 행 한줄에 있는 카페 개수 cafe = [list(map(int, input().split())) for _ in range(n)] # 디저트 카페 visited = [[1 for _ in range(n)] for _ in range(n)] # 방문처리할 배열 answer = -1 for i in range(n): for j in range(1, n): visited[i][j] = 2 # 출발지 표시 dfs(i, j, 0, 1, [cafe[i][j]]) # 탐색 고고 visited[i][j] = 1 # 다음 탐색을 위해 출발지 리셋 print('#{} {}'.format(idx, answer))
'Algorithm > SW Expert Academy' 카테고리의 다른 글
[Python] 2814. 최장경로 (0) | 2021.10.13 |
---|---|
[Python] 1952. 수영장 (0) | 2021.10.12 |
[Python] 4012. 요리사 (0) | 2021.10.12 |
[Python] 1486. 장훈이의 높은 선반 (0) | 2021.10.09 |
[Python] 쉬운 거스름돈 (0) | 2021.10.08 |