연속 길이 세거나 할 때 자꾸 미래를 보지 말 것. K+1 그냥 세고자 하는 값과 다른 게 나와서 streak이 끊어지면, 예를 들어 1110001010 1의 연속된 길이를 찾는다면 현재 값이 1일 때 누적 값 체크하지 말고 0이 나오면 체크할 것

정답

T = int(input())  
# 여러개의 테스트 케이스가 주어지므로, 각각을 처리합니다.  
for test_case in range(1, T + 1):  
    # ///////////////////////////////////////////////////////////////////////////////////  
    ans = 0  
    void = 0  
    num, goal = map(int, input().split()) # n은 배열 크기, k는 목표 단어 길이  
    arr = [list(map(int, input().split())) for _ in range(num)]  
    # 전치행렬 사용한 풀이  
    arr_t = list(zip(*arr))  
    for i in range (2):  
        for j in range (num):  
            void = 0  
            for k in range (num): # k + 1 방식은 성공한 적이 없다, 현 상태를 보고 판단  
                # 답 힌트!!!!!!!: 현재 칸이 1이면 void 올리고, 0일 때 void 접근해서 goal인지 판단 후 리셋  
                # 1일 때 void 상태 체크하면 현재 값이 3이라는 것 외에 뒤에 더 뭐가 오는지 몰라  
                # 그래서 백만장자 문제도 뒤에서 읽은 것  
                # 미래로 가서 0이 나왔을 때 void 체크  
                # void = 0  
  
                if i == 0: # 원래 행렬  
                    if arr[j][k] == 1:  
                        void += 1  
                        if k == num-1: # 열 끝에 다다랐는데 k가 1이면 그냥 넘어가니까  
                            if void == goal:  
                                ans += 1  
  
                    else: # 첫 0 나올 때 지금까지 나온 연속 1의 길이 체크  
                        if void == goal:  
                            ans += 1  
                        void = 0  
                        else: # 전치 행렬  
                    if arr_t[j][k] == 1:  
                        void += 1  
                        if k == num-1: # 열 끝에 다다르면  
                            if void == goal:  
                                ans += 1  
  
                    else:  
                        if void == goal:  
                            ans += 1  
                        void = 0  
    print (f'#{test_case} {ans}')

하현석님 답

T = int(input())
for tc in range(1, T + 1):
    N, K = map(int, input().split())
    grid = [list(map(int, input().split())) for _ in range(N)]
    result = 0
 
    for i in range(N): #가로로 한줄씩 본다
        point = 0
        while point < N:
            if grid[i][point] == 1: #빈칸을 만나면 전체 길이를 센다
                length = 1
                while point + 1 < N and grid[i][point + 1] == 1:
                    length += 1
                    point += 1
                if K == length: #목표 길이와 일치한다면 하나 가산
                    result += 1
                point += 1
            else:
                point += 1
 
    for i in range(N): #세로로 한줄씩 본다
        point = 0
        while point < N:
            if grid[point][i] == 1: #빈칸을 만나면 전체 길이를 센다
                length = 1
                while point + 1 < N and grid[point + 1][i] == 1:
                    length += 1
                    point += 1
                if K == length: #목표 길이와 일치한다면 하나 가산
                    result += 1
                point += 1
            else:
                point += 1
 
    print(f'#{tc} {result}')