배열의 한 점씩 체크하며 dfs를 통해 상하좌우가 같으면 계속해서 탐색해주었다
소스 코드
N,M = map(int,input().split())
arr = [list(map(str,input())) for _ in range(N)]
visited = [[False]*M for _ in range(N)]
dy = [0,0,1,-1]
dx = [1,-1,0,0]
flag=False
def dfs(y, x, py, px, ball):
if visited[y][x]==1:
return True
visited[y][x]=True
for i in range(4):
ny = y + dy[i]
nx = x + dx[i]
if ny!=py or nx!=px:
if 0 <= ny < N and 0 <= nx < M and arr[ny][nx]==ball:
if dfs(ny, nx, y, x, ball):
return True
return False
for i in range(N):
for j in range(M):
if visited[i][j]:
continue
if dfs(i, j, 0, 0, arr[i][j]):
flag=True
break
print("Yes") if flag else print("No")