N X M 격자에 일부 타일이 부서졌다. 당신은 이 부서진 타일을 새로운 2 X 2 격자 크기의 타일로 대체하려고 한다. 이 때 대체하는 타일은 원래 부서진 타일이 있던 위치에 올바른 방향으로 (기울여서는 안된다) 배치할 것이며, 부서지지 않은 타일을 덮으면 안된다. 이러한 대체가 가능할까?
[입력]
첫 번째 줄에 테스트 케이스의 수 TC가 주어진다. 이후 TC개의 테스트 케이스가 새 줄로 구분되어 주어진다. 각 테스트 케이스는 다음과 같이 구성되었다.
∙ 첫 번째 줄에 정수 N, M이 주어진다. (1 ≤ N, M ≤ 50)
∙ 이후 N개의 줄에 타일의 상태를 나타내는 길이 M의 문자열이 주어진다. 부서진 타일이면 ‘#’, 정상 타일이면 ‘.’ 로 표시된다.
[출력]
각 테스트 케이스 마다 한 줄씩, 가능하다면 “YES”, 불가능하다면 “NO” 를 출력하라.
깨진 타일들을 2x2의 사이즈로 모두 채울 수 있는지 확인하는 문제이다.
res=[]
def check(x,y):
if x<(N-1) and y<(M-1): # 범위안인지
for i in range(2): # 4칸전부 깨져있는지
for j in range(2):
if li[x+i][y+j]!='#':
return False
return True
else:
return False
for m in range(int(input())):
tmp="YES" # 기본값은 YES
N,M=map(int,input().split())
li=[]
for i in range(N):
li.append(list(input()))
for i in range(N):
for j in range(M):
if li[i][j]=='#':
if i<(N-1) and j<(M-1) and check(i,j): #4칸 타일들이 깨져있고 범위안에 있는지 확인
for k in range(2): # 타일 채워주기
for m in range(2):
li[i+k][j+m]='.'
else:
tmp="NO"
break
if tmp=="NO":
break
res.append(tmp)
for i in range(len(res)):
print("#%d %s"%(i+1,res[i]))