ํ‹ฐ์Šคํ† ๋ฆฌ ๋ทฐ

728x90
๋ฐ˜์‘ํ˜•

๋ฌธ์ œ

 

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')
728x90
๋ฐ˜์‘ํ˜•
๋Œ“๊ธ€
๊ธ€ ๋ณด๊ด€ํ•จ
์ตœ๊ทผ์— ์˜ฌ๋ผ์˜จ ๊ธ€
์ตœ๊ทผ์— ๋‹ฌ๋ฆฐ ๋Œ“๊ธ€