DFS
처음엔 DFS로 단순히 완전 탐색을 하려고 했었다.
아무 생각 없이 정한 바보같은 생각이었다.
당연하게도 너무 많은 가짓 수가 나오기에, 시간초과가 발생했다.
이렇게 코드를 짜면, 3 + 9 + 27 + … 와 같이 재귀하게 된다.
이는 등비수열의 합이므로, O(3^N)의 복잡도를 갖게 된다.
심지어 x
와 y
사이의 간격이 멀 수록 더욱 시간이 걸린다.
BFS
그럼 DFS보다 조금 더 빠르게 해결이 가능한 BFS는 어떨까?
visit[]
배열과 함께 BFS를 사용함으로써 해결했다.
visit[]
배열을 통해 시간을 줄이는 것이 핵심!
사실 DFS도 visit[]
배열과 함께 돌렸으면, 통과했을 것 같다.
Bonus : DP
처음에 DP를 생각하지 않았던 것은 아니다.
하지만 어떻게 Memoization 할 지 생각이 나지 않았었다.
다른 사람이 DP로 푼 것을 참고해 아래와 같이 풀었다.
1차원 배열을 순차적으로 나아가며, 반대로 확인한다.
x
가 기준이 아닌, 현재 숫자가 x
가 될 수 있는가?
가능하다면 이전의 값에 1을 더하고, 아니면 BIGINT
를 저장한다.