Skip to content

Commit c63a831

Browse files
Merge pull request #2091 from CodingTestStudy2/정진영
[정진영] Day26
2 parents 5ce43a2 + 3f1ff15 commit c63a831

1 file changed

Lines changed: 55 additions & 0 deletions

File tree

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
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+
};

0 commit comments

Comments
 (0)