16929๋ฒ - Two Dots
์ฌ์ดํด์ ๋๋ฆฌ๋ ๋ฌธ์ ์
๋๋ค.
๊ทธ๋ํ๊ฐ ์ฃผ์ด์ก์ ๋, ์์ ๋ณด์๋ ์ฌ์ง๊ณผ ๊ฐ์ด ์์์ ์์ ๋ค๋ฅธ ์ ๊ณผ ๊ฒน์น์ง ์๊ฒ ๋ค์ ๋์์ ์ฌ์ดํด์ ํ์ฑ ํ ์ ์์ผ๋ฉด Yes, ๊ทธ๊ฒ ์๋๋ผ๋ฉด No๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ ํ์ ๋ฌธ์ ์
๋๋ค.
์ผ๋จ ๋ฌธ์ ๋ฅผ ๋ณด๊ณ ๋ ์ค๋ฅธ ๊ฑด ์์์ ์์๋ถํฐ visited๋ก ํ๊ธฐํ๋ฉด์ DFS๋ก ํ์์ ์ด์ด๋๊ฐ๋ ํ์์ ํ์๊ฐ 3ํ ์ด์์ด ๋๋ฉด์ ํ์ฌ ์์น์์ 4๋ฐฉํฅ ํ์์ ํ๋๋ฐ ์์์ ์ด ๋์จ๋ค๋ฉด ์ฌ์ดํด(์ง์ฌ๊ฐํ)์ด ํ์ฑ ๋ ์ ์์ผ๋ฏ๋ก Yes๋ฅผ ์ถ๋ ฅํ๋ฉด ๋๋ค...๋ ๋๋์ผ๋ก ์๊ฐ์ ์ ๋ฆฌํ์ต๋๋ค.
N,M = map(int,input().split())
graph = []
distance = 0
boolean = False
ans = []
visited = [[0]*M for _ in range(N)]
for _ in range(N):
graph.append(list(input()))
๊ทธ๋ํ์ ๋ฐฉ๋ฌธ์ฌ๋ถ, ํ์ ๊ฑฐ๋ฆฌ ๋ฐ bool ๊ฐ์ ์ ์ธํด์ฃผ๊ฒ ์ต๋๋ค.
for i in range(N):
for j in range(M):
dfs(i,j,i,j)
visited = [[0]*M for _ in range(N)]
distance = 0
๊ฐ ์ธ๋ฑ์ค๋ง๋ค ํ์์ ๋์ ๋์ค๋ ๊ฒฐ๊ณผ๊ฐ ๋ค ํ๋ฆฌ๋ฏ๋ก ๋ชจ๋ ์ธ๋ฑ์ค์์ DFS ํ์์ ๋ค ๋๊ฒ ์ต๋๋ค.
import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline
dx = [-1,1,0,0]
dy = [0,0,1,-1]
ํ์ด์ฌ์์ DFS ํ์์ ์ํํ๊ธฐ ์ํด ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋ ๊ฒ๋ค์
๋๋ค.
recursionerror์ ๊ฑธ๋ฆฌ์ง ์๊ธฐ ์ํด setrecursionlimit, ์๊ฐ์ด๊ณผ๋ฅผ ํผํ๊ธฐ ์ํ sysinput๋ฑ์ ๊ฐ์ ธ์ค๊ณ ์ํ์ข์ฐ DFS ํ์์ ์ํํ๊ธฐ ์ํด์ dx์ dy๋ฑ์ ์ ์ธํ๊ฒ ์ต๋๋ค.
def dfs(x,y,first_x,first_y):
global distance,boolean
visited[x][y] = 1
๋จผ์ ๋ฐฉ๋ฌธ์ฒ๋ฆฌ๋ฅผ ํด์ค๋๋ค. first_x,first_y๋ ์์์ ํ๊ธฐ๋ก ๋ญ ๋ฑํ ์ฐ์ฐํ๋๋ฐ ์จ๋จน์ ๊ฒ ์๋ ์์์ ์ผ๋ก ๋์๊ฐ ์ ์๋์ง ํ์ธํด์ฃผ๊ธฐ ์ํด์ ๋๊ณ ์จ ๋ณ์์ ๋๋ค.
for i in range(4):
nx = dx[i] + x
ny = dy[i] + y
4๋ฐฉํฅ ํ์์ ์ค์ํด์ฃผ๊ณ
if [nx,ny] == [first_x,first_y] and distance > 2:
boolean = True
๋ง์ฝ ๊ฑฐ๋ฆฟ๊ฐ์ด 3 ์ด์์ด๊ณ ํ์ฌ ์กฐ์ฌ์ค์ธ ์ธ๋ฑ์ค์์ ์์์ ์ผ๋ก ๋์๊ฐ๋๊ฒ ๊ฐ๋ฅํ๋ค! ํ๋ฉด boolean ๊ฐ์ True๋ก ๋ฆฌํดํด์ค์๋ค.
if nx<0 or ny<0 or nx>=N or ny>=M:
continue
๊ทธ๋ํ ๋ฐ์ ๋ฒ์ด๋์ ํ์ํ๋ ค ์๋ํ๋ค๋ฉด continue๋ก ํด๋น ํ์์์น๋ ๋๊ฒจ๋ฒ๋ฆฌ๊ณ
if not visited[nx][ny] and graph[nx][ny] == graph[x][y]:
distance += 1
# print(boolean,'x ํ์๊ตฌ๊ฐ:',nx,'y ํ์๊ตฌ๊ฐ:',ny,'๊ฑฐ๋ฆฌ:',distance)
dfs(nx,ny,first_x,first_y)
4๋ฐฉํฅ ํ์์ค ํ์ฌ ์๊น์ด ๋ค์ ํ์ํ ๊ตฌ๊ฐ์ ์๊น๊ณผ ์ผ์นํ๊ณ ์์ง ๋ฐฉ๋ฌธํ์ง ์์ ๊ณณ์ด๋ฉด ๊ฑฐ๋ฆฌ๋ฅผ ํ๋ ์ฌ๋ ค์ฃผ๋ฉฐ ์ฌ๊ท๋ก ํ์ํด์ฃผ๋๋ก ํฉ์๋ค.
distance -= 1
๋ง์ง๋ง์ผ๋ก ๊ทธ๋ํ ๊น์ํ ํ์ํ๋ค ๋ ๋ค์ด๊ฐ ์ ์๋ค๋ฉด distance๋ฅผ 1์ฉ ๋นผ์ฃผ๋ฉด์ ๋์์ฃผ๋๋ก ํฉ์๋ค.
if boolean == True:
print('Yes')
else:
print('No')
boolean๊ฐ์ด True์ผ ๊ฒฝ์ฐ Yes๋ฅผ, False์ผ ๊ฒฝ์ฐ No๋ฅผ ์ถ๋ ฅํ๋ฉด ์ ๋ต์ด ๋์ต๋๋ค.