여기 멋진 반례가 하나 있습니다.
이 예시의 경우 맨 처음 오른쪽으로 출발해서 가면 10번이면 도착이 가능하지만, 이 코드에서는 (입력 전체 기준으로) 9행 4열에 말 이동 횟수를 1 남기고 가장 먼저 도달하는 경로는 처음에 아래 방향으로 출발한 경로입니다. 그런데 이때는 11행 5열의 0을 거쳐서 방문했기 때문에 visited 체크가 되어있어, 11행 5열로 다시 거쳐서 내려가면 3번만에 끝에 도달할 수 있음에도 불구하고 ret가 inf가 되고 맙니다.
나중에 처음에 오른쪽으로 출발한 경로를 따라서 다시 9행 4열에 말 이동 횟수를 1 남기고 도달했을 때는 ret가 -1이 아니기 때문에 그대로 inf를 반환하게 되고, 그래서 이 경로가 더 짧을 수 있음에도 불구하고 프로그램은 처음에 아래로 출발했을 때의 이동 경로인 12를 출력하게 됩니다.
traveling 함수 수행 이후 해당 칸의 dp값 (cache[6][3][1])을 출력해보세요.
hssk1528 5년 전
문제가 bfs를 활용해야한다는 건 확인했습니다만 처음 문제를 읽고 생각난 알고리즘이 dp라서 dp로 구현을 해보았습니다.
그리고 오답을 받아서 질문글을 찾아보던 중 저랑 거의 비슷하게 구현하신 분 글을 봤는데 답변에 dp에는 visited를 적용하면 안된다고 하시더라구요
저는 visited를 무한루프 도는 것을 방지하기 위해서 사용하였는데 왜 안되는지도 궁금합니다ㅜㅜ
그 질문글에 있던 반례도 맞게 나오는데 말이죠...
어떤 부분에서 틀렸는지, dp로는 시간문제때문에 해결할 수 없는것인지 궁금합니다