728x90
https://www.acmicpc.net/problem/14890
원래는 row 별 갈수 있는 길, column 별 갈 수 있는길을 각각 함수로 만들어줄까 했다.
그래서 원래는 row 체크중이면 type 1 column 체크중이면 type2로 할까했는데.. 생각해보니까
check_row 함수를 재활용하고 배열을 90도 시계방향으로 돌려서 array를 parameter로 전달하면 될것 같아서 따로 column 을 확인하는 함수를 만들지 않았다 (사실 귀찮아서..)
그래서 코드에 저 type 변수는 무시해도 된다..
new_array = list(map(list, zip(*array[::-1])))
이게 90도 시계방향으로 돌리는 코드이다
n, length = map(int, input().split())
array = []
for i in range(n):
array.append(list(map(int, input().split())))
answer = 0
visited = [[False] * n for _ in range(n)]
def is_in_range(x, y):
if 0 <= x < n and 0 <= y < n:
return True
else:
return False
def check_further(x, y, type, array):
if type == 1: # row
for i in range(1, length+1):
if is_in_range(x, y+i):
if array[x][y] -1 == array[x][y+i] and not visited[x][y+i]:
visited[x][y + i] = True
else:
return False
else:
return False
return True
def check_before(x, y, type, array):
if type == 1:
for i in range(1, length):
if is_in_range(x, y-i):
if array[x][y] == array[x][y-i] and not visited[x][y-i]:
visited[x][y-i] = True
else:
return False
else:
return False
return True
def check_row(array):
global answer
for i in range(n):
flag = True
for j in range(n-1):
if array[i][j] == array[i][j+1]:
continue
if array[i][j]-1 == array[i][j+1]:
if not visited[i][j+1]:
if check_further(i, j, 1, array):
visited[i][j + 1] = True
else:
flag = False
break
else:
flag = False
break
if array[i][j]+1 == array[i][j+1]:
if not visited[i][j]:
if check_before(i, j, 1, array):
visited[i][j] = True
else:
flag = False
break
else:
flag = False
break
if abs(array[i][j] - array[i][j+1]) > 1:
flag = False
break
if flag:
answer += 1
check_row(array)
visited = [[False] * n for _ in range(n)]
# 90도 회전하기 시계방향으로
new_array = list(map(list, zip(*array[::-1])))
check_row(new_array)
print(answer)
728x90
'Algorithm (PS)' 카테고리의 다른 글
[백준] 15486번: 퇴사 2 (0) | 2023.01.14 |
---|---|
[프로그래머스] 이모티콘 할인행사 Python (0) | 2023.01.13 |
[프로그래머스] 오픈채팅방 Python3 - Kakao 2019 (0) | 2023.01.12 |
[백준] 15683번 : 감시 (0) | 2023.01.11 |
[백준] 3184번: 양 Python - BFS풀이 (0) | 2023.01.10 |