File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ /**
2+ * @param {number} n
3+ * @return {number}
4+ */
5+ var knightDialer = function(n) {
6+ /*
7+ 0 → 4, 6
8+ 1 → 6, 8
9+ 2 → 7, 9
10+ 3 → 4, 8
11+ 4 → 0, 3, 9
12+ 5 → x
13+ 6 → 0, 1, 7
14+ 7 → 2, 6
15+ 8 → 1, 3
16+ 9 → 2, 4
17+ */
18+
19+ // dp
20+ const MOD = 1000000007;
21+
22+ const moves = [
23+ [4, 6], // 0
24+ [6, 8], // 1
25+ [7, 9], // 2
26+ [4, 8], // 3
27+ [0, 3, 9], // 4
28+ [], // 5
29+ [0, 1, 7], // 6
30+ [2, 6], // 7
31+ [1, 3], // 8
32+ [2, 4] // 9
33+ ];
34+
35+ // 길이 1일 때는 각 숫자에서 시작하는 경우가 1개씩
36+ let dp = Array(10).fill(1);
37+
38+ for (let len = 2; len <= n; len++) {
39+ const next = Array(10).fill(0);
40+
41+ for (let digit = 0; digit < 10; digit++) {
42+ for (const nextDigit of moves[digit]) {
43+ next[nextDigit] =
44+ (next[nextDigit] + dp[digit]) % MOD;
45+ }
46+ }
47+
48+ dp = next;
49+ }
50+
51+ return dp.reduce(
52+ (sum, count) => (sum + count) % MOD,
53+ 0
54+ );
55+ };
You can’t perform that action at this time.
0 commit comments