https://www.acmicpc.net/problem/1987
# 2023.01.18
import sys
input = sys.stdin.readline
r, c = map(int, input().split())
alpha = [list(input().rstrip()) for _ in range(r)]
visited=[0]*(26) # 26개의 알파벳을 방문했는지 check
visited[ord(alpha[0][0])-65]=1 # 0행 0열의 알파벳 방문
dx=[0, 0, 1, -1]
dy=[1, -1, 0, 0]
answer=0
def dfs(x, y, path):
global answer
answer = max(answer, path)
for i in range(4):
nx=dx[i]+x
ny=dy[i]+y
# 범위 내 & 방문하지 않았다면
if 0<=nx<r and 0<=ny<c and visited[ord(alpha[nx][ny])-65]==0:
visited[ord(alpha[nx][ny])-65]=1
dfs(nx, ny, path+1)
visited[ord(alpha[nx][ny])-65]=0 # 백트레킹
dfs(0, 0, 1)
print(answer)
'Problem Solving > BOJ' 카테고리의 다른 글
[Divide and Conquer] python 10830 행렬 제곱 (0) | 2023.01.21 |
---|---|
[Meet in the Middle] python 1450 냅색문제 (0) | 2023.01.20 |
[Combination] 16938 캠프 준비 (0) | 2023.01.18 |
[BOJ] 16928 뱀과 사다리 게임 (1) | 2023.01.18 |
[Dict] 2143 두 배열의 합 (0) | 2023.01.15 |