rotate는 칸을 m칸씩 미는 함수
(0~3은 1행 2행 3행 4행, 4~7은 1열 2열 3열 4열)

check는 현재 상태가 최종 상태와 몇개나 일치하는지 반환하는 함수입니다.

탐색을 할 때 check()해서 받아온 변수인 pruning을 가지고
현재의 최소 이동횟수보다 2가 작다면 무조건 1번만 더 밀어야 현재보다 최소값이 되므로 [행]또는 [열]을 한 번만 밀면 최종 값이 되는 상태가 되어있어햐 합니다. 즉 현재 상태가 최종 상태와 일치하는 개수인 pruning이 12인지 체크합니다. 아니라면 그상태에서 탐색 종료.
현재의 최소 이동횟수보다 3이 작다면 무조건 2번만 더 밀어야 현재보다 최소값이 되므로 2번 더 미는 경우는 [행, 행],[열, 열],[행, 열],[열, 행] 이니 현재 값이 최종값과 9개 또는 8개가 일치해야합니다. 아니라면 그 상태에서 탐색 종료.

그런데도 시간초과가 뜨네요.. 어디서 더 줄여야할지 ㅠㅠ

nthensome01   4달 전

X, Y 나누어 풀어보세요~

댓글을 작성하려면 로그인해야 합니다.