반응형
https://www.acmicpc.net/problem/14890
n, m = map(int, input().split())
table = []
for _ in range(n):
table.append(list(map(int, input().split())))
rotated = [[0 for _ in range(n)] for _ in range(n)]
for i in range(n):
for j in range(n):
rotated[i][j] = table[j][n-1-i]
answer = 0
def check(table):
global answer
for i in range(n):
height = table[i][0]
stack = 1
j = 1
while j < n:
if height == 0:
height = table[i][j]
stack += 1
elif height == table[i][j]:
stack += 1
elif table[i][j] - height == 1: # 올라갈 수 있는지 체크
if stack < m:
break
height += 1 # 올라갔다면 높이는 1 증가
stack = 1 # 올라갔다면 스택은 1로 설정
elif height - table[i][j] == 1: # 내려갈 수 있는지 체크
if j+m > n: break
front = table[i][j:j+m]
possible = True
for f in front:
if f != height -1:
possible = False
break
if possible:
j += m
height -= 1 # 내려갔다면 높이는 1 감소
stack = 0 # 내려갔다면 스택은 0으로 설정정
continue
else:
break
else:
break
j += 1
if j >= n:
answer += 1
check(table)
check(rotated)
print(answer)
빡구현은 늘 힘들다.
올라갈 때는 경사로를 이미 다 탔기 때문에 stack이 1이 되어야 하고
내려갈 때는 경사로를 다 타지 않고 경사로의 마지막 칸에 있는 상황이라 stack을 0으로 설정해줘야 한다.
댓글