import sys
input = sys.stdin.readline
nsize, nload = list(map(int, input().split()))
board = []
for _ in range(nsize):
board.append(list(map(int, input().split())))
answer = 0
def isCrossable(ls):
i = 1
count = 1
crossable = True
while i < len(ls):
if ls[i-1] == ls[i]:
count += 1
i += 1
elif ls[i-1] < ls[i]:
if ls[i-1] + 1 != ls[i] or count < nload:
crossable = False
break
count = 1
i += 1
else:
for j in range(nload):
if i + j >= len(ls) or ls[i-1] - 1!= ls[i + j]:
crossable = False
break
if not crossable:
break
count = 0
i += nload
return 1 if crossable else 0
for i in range(nsize):
answer += (isCrossable(board[i]))
for i in range(nsize):
answer += (isCrossable([board[j][i] for j in range(nsize)]))
print(answer)
최대한 코드를 간결하게 짜는 것을 연습해야겠다. 내가 보고 생각하기에도 어려운 코드는 실수가 생기기 너무 쉽다.
isCrossable
은 배열을 전달받아 건너는 것이 가능한 지 확인한다.