boj16929 two dots

cohΒ·2022λ…„ 6μ›” 28일
0

λ°±μ€€

λͺ©λ‘ 보기
27/27

πŸŽ―μ „ν˜•μ μΈ DFSλ¬Έμ œλΌλŠ” 생각이 λ“€μ—ˆμŒ.
근데 μˆœν™˜ loopλ₯Ό κ΅¬ν•˜λŠ” μ„œμšΈ μ§€ν•˜μ²  2ν˜Έμ„ μ„ 이미 ν’€μ—ˆκΈ° λ•Œλ¬Έμ— 더 μ‰½κ²Œ ν•  수 μžˆμ—ˆλ˜ 것 κ°™λ‹€. λ‹€λ§Œ! 이 λ¬Έμ œλŠ” matrix κ΅¬μ‘°λΌμ„œ 그에 맞게 문제만 λ³€ν˜•ν•΄μ£Όλ©΄ λ˜μ—ˆμŒ!

μ²˜μŒμ— μ—λŸ¬κ°€ λ–΄μ—ˆλŠ”λ° μ–΄λ””μ„œ 떴냐면..

# μ΄λ ‡κ²Œ ν•˜λ©΄ ν•œλ²ˆ νƒμƒ‰ν•˜κ³  이전 것 λ°©λ¬Έ ν‘œμ‹œ λ˜μ–΄μ„œ λ°”λ‘œ True λ°˜ν™˜ν•¨.
        elif 0<=nx<n and 0<=ny<m and card[nx][ny] == color and \
        visit[nx][ny] is True and cnt >= 2:

λ°”λ‘œ 이 뢀뢄이닀.. λ‹€μŒ λ…Έλ“œ 탐색할 λ•Œ λ°”λ‘œ 이전 λ…Έλ“œκ°€ 쑰건에 걸렀버림...
κ·Έλž˜μ„œ 생각을 ν•˜λ‹€κ°€ κ·Έλƒ₯ 각 λ…Έλ“œμ— λŒ€ν•΄μ„œ μˆœν™˜μΈμ§€ νŒŒμ•…ν–ˆλ˜ μ„œμšΈ μ§€ν•˜μ²  2ν˜Έμ„  문제처럼 ν’€μ–΄μ•Ό λ˜κ² κ΅¬λ‚˜ 이 생각이 듦.

πŸ“start node is next node 라면 μˆœν™˜μ„  μ΄λΌλŠ” λ‘œμ§μ„ μ΄μš©ν–ˆμŒ

λ­”κ°€ brute force λŠλ‚ŒμœΌλ‘œ ν’€μ–΄λ²„λ €μ„œ 사싀 λŸ°νƒ€μž„ μ—λŸ¬ 뜰 쀄 μ•Œμ•˜λŠ”λ° μ•ˆ λœ¨λ”λΌκ³ ... λ³΄λ‹ˆκΉŒ data κ°―μˆ˜κ°€ μ—„μ²­ μ μ—ˆμŒ. 흠... 일단 λ‚˜μ€‘μ— μ’€ 더 쒋은 μ•Œκ³ λ¦¬μ¦˜ 생각해 λ΄μ•Όκ²Ÿλ‹€.. ν”Όκ³€ν•΄μ„œ 자러 가야함 γ… γ… 

import sys
sys.stdin = open('test.txt', 'r')

n, m = map(int, input().split())
# print 찍어보면 κ°œν–‰ λ“€μ–΄μžˆμ–΄μ„œ rstrip 이용
card = [list(sys.stdin.readline().rstrip()) for _ in range(n)]
flag = False

def dfs(start, next, color, visit, cnt):
    global flag
    a, b = next
    visit[a][b] = True
    for i in range(4):
        nx = a + dx[i]
        ny = b + dy[i]
        # λ²”μœ„ μ•ˆμ΄κ³  같은 μ»¬λŸ¬μ΄λ©΄μ„œ λ°©λ¬Έν•˜μ§€ μ•Šμ•˜μ„ λ•Œ
        if 0<=nx<n and 0<=ny<m and card[nx][ny] == color and visit[nx][ny] is False:
            dfs(start, (nx,ny), color, visit, cnt + 1)
        # λ²”μœ„ μ•ˆμ΄κ³  같은 μ»¬λŸ¬μ΄λ©΄μ„œ λ°©λ¬Έν–ˆλ‹€λ©΄ μˆœν™˜κ΅¬μ‘°

        # μ΄λ ‡κ²Œ ν•˜λ©΄ ν•œλ²ˆ νƒμƒ‰ν•˜κ³  이전 것 λ°©λ¬Έ ν‘œμ‹œ λ˜μ–΄μ„œ λ°”λ‘œ True λ°˜ν™˜ν•¨.
        elif start == (nx, ny) and 0<=nx<n and 0<=ny<m and card[nx][ny] == color and visit[nx][ny] is True and cnt >= 2:
            flag = True
            return



dx=[1,-1,0,0]
dy=[0,0,1,-1]
for i in range(n):
    for j in range(m):
        visit = [[False] * m for _ in range(n)]
        dfs((i,j),(i,j), card[i][j], visit, 0)

if flag is True:
    print("Yes")
else:
    print("No")
profile
Written by coh

0개의 λŒ“κΈ€