소스 코드

T = int(input())

# 좌 우 우하 위치의 타일 확인위한 인덱스
x = [0,1,1]
y = [1,0,1]

for tc in range(1,1+T):

    n,m = map(int,input().split())

    tiles = [list(input()) for _ in range(n)]

    # 방문여부
    check = [[0]*m for _ in range(n)]

    answer = 0
    for q in range(n):
        if answer == 1:
            break

        for w in range(m):
            if answer == 1:
                break

            if tiles[q][w] == '#' and check[q][w] == 0:
                check[q][w] = 1

                # 3 방향 확인
                for e in range(3):
                    i = x[e] + q
                    j = y[e] + w

                    if i < n and j < m:
                        if tiles[i][j] == '#':
                            check[i][j] = 1

                        else:
                            answer = 1
                            break

                    else:
                        answer = 1
                        break

    if answer == 1:
        print('#{} {}'.format(tc,'NO'))

    else:
        print('#{} {}'.format(tc,'YES'))

 


해결 방법

1. 깨진 타일을 발견하면 해당 위치에서 우, 하, 우하 위치의 타일을 확인

 

2. 2x2 타일이 모두 깨진 상태면 방문 확인 후 계속 진행 그 외의 경우 break


느낀 점

 

 

ps. 개인적인 코드와 코드를 작성의 이유를 적은 것입니다.

 

오류적절치 않은 문법이 존재할 수 있으며, 다른 분들께는 굉장히 비효율적인 방법으로 여겨질 수 있습니다.

 

혹시 개선 사항, 오류 및 문제에 대한 수정 사항 등을 댓글로 남겨주신다면 감사한 마음으로 배우고 수정하겠습니다.