문제
해결과정
- DFS로 풀기
 
- (0,0)부터 시작한다. 
 
- 상하좌우를 확인한다.
0 <= nx < r and 0 <= ny < c: 범위 안에 있고  
- 지나갔던 알파벳이 아니라면
 
- 알파벳 집합에 넣고 dfs를 돈다.
 
- 재귀를 빠져나오면 넣었던 알파벳을 다시 뺀다 = 백트래킹
 
 
시행착오
- 최대의 칸 수가 아니다.. -> dfs 파라미터 수정, alpha.pop() 해주기 -> 백트래킹
 
import sys
r,c = map(int,sys.stdin.readline().split())
graph = []
for _ in range(r):
  graph.append(list(sys.stdin.readline().strip()))
print(graph)
dx = [-1,1,0,0]
dy = [0,0,1,-1]
visited = [[False] * c for _ in range(r)]
alpha = []
cnt = 0
def dfs(x,y):
  global cnt
  visited[x][y] = True
  alpha.append(graph[x][y])
  cnt += 1
  for i in range(4):
    nx = x + dx[i]
    ny = y + dy[i]
    if 0 <= nx < r  and 0 <= ny < c:
      if not visited[nx][ny]:
        if graph[nx][ny] not in alpha:
          visited[nx][ny] = True
          dfs(nx,ny)
          
dfs(0,0)
print(cnt)
- 시간초과 -> 리스트를 집합으로 바꾸면 pypy3 통과
 
import sys
r,c = map(int,sys.stdin.readline().split())
graph = []
for _ in range(r):
  graph.append(list(sys.stdin.readline().strip()))
dx = [-1,1,0,0]
dy = [0,0,1,-1]
alpha = []
ans = 0
def dfs(x,y,cnt):
  global ans
  ans = max(ans, cnt)
  alpha.append(graph[x][y])
  for i in range(4):
    nx = x + dx[i]
    ny = y + dy[i]
    if 0 <= nx < r  and 0 <= ny < c:
        if graph[nx][ny] not in alpha:
			
          dfs(nx,ny,cnt+1)
          alpha.pop()
          
dfs(0,0,1)
print(ans)
Pypy3 풀이
import sys
r,c = map(int,sys.stdin.readline().split())
graph = []
for _ in range(r):
  graph.append(list(sys.stdin.readline().strip()))
dx = [-1,1,0,0]
dy = [0,0,1,-1]
alpha = set()
ans = 0
def dfs(x,y,cnt):
  global ans
  ans = max(ans, cnt)
  for i in range(4):
    nx = x + dx[i]
    ny = y + dy[i]
    
    
    if 0 <= nx < r  and 0 <= ny < c:
      
      if graph[nx][ny] not in alpha:
        
        alpha.add(graph[nx][ny])
        dfs(nx,ny,cnt+1)
        
        alpha.remove(graph[nx][ny])
          
alpha.add(graph[0][0])
dfs(0,0,1)
print(ans)