배열에서 딱 K길이만큼 1인 것들을 찾아야한다.
total을 총 단어 개수로 하고,
cnt를 그 줄의 1의 개수로 두면서 계속 초기화를 시켜줬다.
#가로
for i in range(N):
cnt = 0
for j in range(N):
if arr[i][j]==0 and cnt==K:
total +=1
cnt = 0
elif arr[i][j]==0:
cnt = 0
elif arr[i][j] == 1:
cnt += 1
if cnt==K and j==N-1:
total+=1
cnt = 0
다른 부분은 쉬우니까 가로 판별하는 부분만 일단 설명을 하자면,
가로 줄이 바뀔때마다 일단 cnt를 초기화시켜준다
그리고 배열 값이 1이면 cnt에 1을 더한다.
이제 0을 만났을때랑
가로줄 끝까지 갔을때의 상황에서 어떻게 할건지 정해주면 된다.
1) 0을 만났는데, 이전 K개의 칸들이 모두 1일 경우
total에 1을 더하고 cnt를 0으로 초기화시킨다.
2)그 외 0을 만난 경우
cnt 를 0으로 초기화시킨다.
3) 배열 값이 1일때 cnt에 1을 추가한다
이때, 지금 내가 보고있는 칸이 줄의 맨 마지막칸이면,
지금 칸까지의 cnt가 K인지 확인해주고, total값에 추가한다.
전체코드)
T = int(input())
for tc in range(1, 1+T):
N, K = map(int, input().split())
arr = [list(map(int, input().split())) for _ in range(N)]
total = 0
#가로
for i in range(N):
cnt = 0
for j in range(N):
if arr[i][j]==0 and cnt==K:
total +=1
cnt = 0
elif arr[i][j]==0:
cnt = 0
elif arr[i][j] == 1:
cnt += 1
if cnt==K and j==N-1:
total+=1
cnt = 0
#세로
for i in range(N):
cnt = 0
for j in range(N):
if arr[j][i]==0 and cnt==K:
total +=1
cnt = 0
elif arr[j][i]==0:
cnt = 0
elif arr[j][i] == 1:
cnt += 1
if cnt==K and j==N-1:
total +=1
cnt = 0
print(f'#{tc} {total}')
'파이썬 알고리즘' 카테고리의 다른 글
백준 10157 자리배정 파이썬 풀이 (1) | 2022.09.23 |
---|---|
백준 2628 종이자르기 파이썬 풀이 (0) | 2022.09.22 |
백준 2578 빙고 파이썬 풀이 (4) | 2022.09.22 |
SWEA 4893 이진탐색 (list1) (1) | 2022.09.20 |
SWEA 전기버스 풀이2: 재귀 활용해서 풀기 (3) | 2022.09.20 |