adfsfsf   5년 전

DFS를 이용했으며, visit배열을 통해 현재 루트에서 지나온 칸들을 체크하였고, 이미 지나온 칸을 다시 방문하면 루프 처리를 해 재귀를 전부 빠져나간 후 -1을 출력합니다.(루프가 있다는 말은 무한히 반복할 수 있다는 의미이므로)

현재 방문한 칸이 'H' 또는 마지막 칸(무조건 보드 밖으로 나가는 칸)이면 dp에 다음 칸이 없다는 표시를 한 후, 해당 칸에 몇 번의 이동만에 도달했는지를 저장합니다.

만약 dp에 값이 이미 채워진 칸에 들어섰다면 dp에 있는 값이 현재 해당 칸까지 오는 데까지 걸린 횟수보다 많거나 같은가를 확인합니다. 많거나 같다면 무조건 루프가 아닙니다. 이 때는 이 루트 끝까지 걸리는 횟수를 현재 횟수에 추가해서 반환합니다.

dp에 있는 값이 더 적다면 루프일 수 있으므로 체크합니다. 루프이면 루프 체크용 전역 변수를 true로 바꾼 후 함수를 빠져나갑니다. 루프가 아니라면 현재 값과 기존 dp값의 차이를 구한 후 루트를 따라가면서 그 차이만큼 dp값을 다 더해줍니다. 그 후, 변경된 루트의 최종값을 반환합니다.

위의 경우들이 아니면 dp에 값을 채워야 합니다. 우선, 현재 칸까지의 횟수를 넣습니다. 그리고, 다음 좌표를 구해야 합니다. 다음 좌표는 4가지 방향을 차례대로 확인하며, 가장 큰 값을 반환하는 방향의 칸을 dp에 넣습니다.

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