Two Dots - BOJ
dx = [0, 0, -1, 1]
dy = [-1, 1, 0, 0]
def dfs(x, y, cnt):
global tx, ty, flag
if flag: return
for i in range(4):
nx = x + dx[i]
ny = y + dy[i]
if nx < 0 or ny < 0 or nx >= N or ny >= M or a[nx][ny] != a[tx][ty]: # 범위 벗어나지 않고, 색깔이 같을 때만 하도록
continue
if not visit[nx][ny]:
visit[nx][ny] = True # 방문처리 했다가
dfs(nx, ny, cnt + 1)
visit[nx][ny] = False # 안한 걸로
else:
if cnt >= 4 and tx == nx and ty == ny: # 4번 이상이고 위치가 같을 때 -> 사이클
flag = True
return
N, M = map(int, input().split())
a = [list(input()) for _ in range(N)]
visit = [[False] * M for _ in range(N)]
flag = False
for i in range(N):
for j in range(M):
if not visit[i][j]:
tx, ty = i, j
visit[i][j] = True
dfs(i, j, 1)
if flag:
print("Yes")
exit(0)
print("No")
'코딩테스트 > BOJ' 카테고리의 다른 글
[BOJ] 17136 색종이 붙이기 (python) (0) | 2020.09.18 |
---|---|
[BOJ] 16971 배열 B의 값 (python) (0) | 2020.09.04 |
[BOJ] 10026 적록색약 (python) (0) | 2020.09.03 |
백준 #5052 전화번호목록 (Python) (0) | 2020.04.16 |
백준 #13549 숨바꼭질3 (Python) (0) | 2020.04.12 |