Problem
Concept & Idea
DFS나 BFS만으로 해결을 하려고하면 안되는 문제이다. 시간초과가 나기 때문에, 이미 내가 왔던 곳은 탐색하지 않는다라는 개념을 가지고 해결해야한다.
초기 조건부터 dp[x][y]가 true라면 바로 값을 반환하게 코드를 구현하였다.
왜 조건문에 dp[x][y]+1>dp[curi][curk]일 때 수행하지 못하는지 의문이었다..
‘that_is_mo’를 통해 알아낸 문제 해결법
- 현재 서있는 위치에서 갈 수 있는 길과 갈 수 없는 길은 정해져있다.
- 어떤 경로로 왔든지, 이미 왔던 경로는 밟지 못한다.
- DP[][] 배열에 저장하는 값은 해당 위치에서 앞으로 얼마나 많이 갈 수 있느냐!
- DP[][] 배열을 기준으로 내 앞에 어떤 수가 있으면, 나는 해당 배열의 값+1만큼을 더 들어갈 수 있다.
Code
Fealing
DFS와 DP가 결합된 문제였다.. 나는 DP[x][y]+1>DP[curi][curk]라면 무조건 탐색을 다시 해도 된다고 생각했는데, 그것이 아니었나보다.. DP의 값이 0이 아니면 바로 리턴하게 코드를 짜놓았는데도,, 잘 해결이 되지 않았다.. 그래도 생각한 것은 거의 맞았던 것 같은데 왜 정확하게 맞았는지 의문이다.. 나는 DFS함수를 int형 타입으로 하지 않아서 그렇게 두지 않으려고 노력했는데.. 아쉽다.
Check out this code in Victoria’s Gist. Please Comment my code in this link.