[BOJ] 경사로

김가영·2021년 3월 15일
0

Algorithm

목록 보기
71/78
post-thumbnail
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 은 배열을 전달받아 건너는 것이 가능한 지 확인한다.

profile
개발블로그

0개의 댓글