ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
16929๋ฒ: Two Dots
์ฒซ์งธ ์ค์ ๊ฒ์ํ์ ํฌ๊ธฐ N, M์ด ์ฃผ์ด์ง๋ค. ๋์งธ ์ค๋ถํฐ N๊ฐ์ ์ค์ ๊ฒ์ํ์ ์ํ๊ฐ ์ฃผ์ด์ง๋ค. ๊ฒ์ํ์ ๋ชจ๋ ์ ์ผ๋ก ๊ฐ๋์ฐจ ์๊ณ , ๊ฒ์ํ์ ์ํ๋ ์ ์ ์์ ์๋ฏธํ๋ค. ์ ์ ์์ ์ํ๋ฒณ ๋๋ฌธ๏ฟฝ๏ฟฝ
www.acmicpc.net
๋ฌธ์ ํ์ด
ํน์ ์ง์ ์ ์์์ผ๋ก ๊ฐ์ ์์ ๊ฐ์ง ์ธ์ดํด์ด ์๋์ง ํ์ธํ๊ณ ๋ฐํํ๋ ๋ฌธ์ ์ด๋ค. ๋ฐ๋ผ์ ํน์ ์ง์ ์์ DFS๋ฅผ ํตํด ์, ํ, ์ข, ์ฐ๋ก ์ํํ๋ ๊ฐ์ ์ถ๋ฐ ์ง์ ๊ณผ ๊ฐ์ ์์ธ์ง์, ๋ฐฉ๋ฌธ์ฌ๋ถ๋ฅผ ํ๋จํ๊ฒ ๋๋ฉด ์ธ์ดํด ์ฌ๋ถ๋ฅผ ํ์ธ ํ ์ ์๋ค.
DFS๋ฅผ ํตํด ํ์ํ ๋ ๋ค์๊ณผ ๊ฐ์ด ์งํํ๋ฉด ๋ต์ ์ฐพ์ ์ ์๋ค.
- ์, ํ, ์ข, ์ฐ ํ์ ์ 0 <= x < n, 0 <= y < m๊ณผ ๊ฐ์ด ์์ญ์ ๋ฒ์ด๋์ง ์๋์ง ํ์ธํ์ฌ์ผ ํ๋ค.
-
์ต์ ์ธ์ดํด์ ์ด๋ฃจ๋ ์ ์ ๊ฐ์๋ 4๊ฐ ์ด๋ค.
- ์ ์ ๊ฐ์๊ฐ 4๊ฐ ์ด์์ด๊ณ , ์์์ ์ผ๋ก ๋์์จ๋ค๋ฉด ์ธ์ดํด์ด ์๋ ๊ฒ์ด๋ค.
- ๋ฐฑํธ๋ํน์ด ํ์ํ๋ฏ๋ก, ์ฌ๊ท ํธ์ถ ํ ์๋ ๋๋ก ์ด๊ธฐํํ์ฌ์ผ ํ๋ค.
์ฝ๋
from sys import stdin
def visitable(x, y):
return 0 <= x < n and 0 <= y < m and not visited[x][y]
def dfs(cnt, start, cur, color):
for x, y in dirs:
next_x, next_y = cur[X] + x, cur[Y] + y
# 4์ ์ด์์ ๋ฐฉ๋ฌธํ๊ณ , ์ถ๋ฐ์ ๊ณผ ๊ฐ๋ค๋ฉด ์ธ์ดํด์ด ์๋ ๊ฒ์ด๋ค.
if cnt >= 4 and start == [next_x, next_y]:
print('Yes')
exit()
if visitable(next_x, next_y) and graph[next_x][next_y] == color:
visited[next_x][next_y] = True
dfs(cnt + 1, start, [next_x, next_y], color)
visited[next_x][next_y] = False
if __name__ == "__main__":
answer = False
X, Y = 0, 1
n, m = map(int, stdin.readline().split())
graph = [list(stdin.readline().strip()) for _ in range(n)]
visited = [[False] * m for _ in range(n)]
dirs = ((0, 1), (0, -1), (1, 0), (-1, 0))
for x in range(n):
for y in range(m):
if not visited[x][y]:
visited[x][y] = True
dfs(1, [x, y], [x, y], graph[x][y])
print('No')
'๐จโ๐ป ์ฝ๋ฉํ ์คํธ > ๋ฐฑ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค: 12851 ์จ๋ฐ๊ผญ์ง 2 (0) | 2020.07.24 |
---|---|
๋ฐฑ์ค: 1697 ์จ๋ฐ๊ผญ์ง (0) | 2020.07.23 |
๋ฐฑ์ค: 1707 ์ด๋ถ ๊ทธ๋ํ (0) | 2020.07.22 |
๋ฐฑ์ค: 7526 ๋์ดํธ์ ์ด๋ (0) | 2020.07.22 |
๋ฐฑ์ค: 7576 ํ ๋งํ (0) | 2020.07.22 |