SWEA 1979. 어디에 단어가 들어갈 수 있을까(Python)(D2)

Wjong·2023년 1월 27일
0

swea

목록 보기
6/36


위와같은 퍼즐이 있을 경우, 아래와 같이 상하좌우 1칸씩 0(검은칸)을 늘려준다
(맨왼쪽 위를 (1,1), 맨오른쪽아래를 (N,N) 라 하면 (0,0) ~ (N+1,N+1)으로

이후, (1,1)부터 (N,N)까지 순회하면서 길이가 K이고 양끝은 0인 공간을 찾아 카운트!

res=[]
def check_length(x,y):
    global N
    count=0
    if x-1>=0 and (x+K)<=(N+1):
        if li[x-1][y]==0 and li[x+K][y]==0:

            for i in range(K):
                count+=li[x+i][y]
            if count==K:
                return True
    return False

def check_width(x,y):
    global N
    if y-1>=0 and (y+K)<=(N+1):
        if li[x][y-1]==0 and li[x][y+K]==0:
            if sum(li[x][y:y+K])==K:
                return True
    return False

for m in range(int(input())):
    tmp=0
    N,K=map(int,input().split())
    li=[[0]*(N+2)]
    for i in range(N):
        li.append([0]+list(map(int,input().split()))+[0])
    li.append([0]*(N+2))
    for i in range(1,N+1):
        for j in range(1,N+1):
            if check_length(i,j):
                tmp+=1
            if check_width(i,j):
                tmp+=1
    res.append(tmp)
for i in range(len(res)):
    print("#%d %s"%(i+1,res[i]))
profile
뉴비

0개의 댓글