From 3f1ff1559abd99c812a52a2014d625a54d29b257 Mon Sep 17 00:00:00 2001 From: Jinyoung Jeong <80400463+jyoung2419@users.noreply.github.com> Date: Sat, 26 Sep 2026 23:44:06 +0900 Subject: [PATCH] Create 935. Knight Dialer --- .../935. Knight Dialer" | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 "leetcode3/\354\240\225\354\247\204\354\230\201/935. Knight Dialer" diff --git "a/leetcode3/\354\240\225\354\247\204\354\230\201/935. Knight Dialer" "b/leetcode3/\354\240\225\354\247\204\354\230\201/935. Knight Dialer" new file mode 100644 index 00000000..f0035c97 --- /dev/null +++ "b/leetcode3/\354\240\225\354\247\204\354\230\201/935. Knight Dialer" @@ -0,0 +1,55 @@ +/** + * @param {number} n + * @return {number} + */ +var knightDialer = function(n) { + /* + 0 → 4, 6 + 1 → 6, 8 + 2 → 7, 9 + 3 → 4, 8 + 4 → 0, 3, 9 + 5 → x + 6 → 0, 1, 7 + 7 → 2, 6 + 8 → 1, 3 + 9 → 2, 4 + */ + + // dp + const MOD = 1000000007; + + const moves = [ + [4, 6], // 0 + [6, 8], // 1 + [7, 9], // 2 + [4, 8], // 3 + [0, 3, 9], // 4 + [], // 5 + [0, 1, 7], // 6 + [2, 6], // 7 + [1, 3], // 8 + [2, 4] // 9 + ]; + + // 길이 1일 때는 각 숫자에서 시작하는 경우가 1개씩 + let dp = Array(10).fill(1); + + for (let len = 2; len <= n; len++) { + const next = Array(10).fill(0); + + for (let digit = 0; digit < 10; digit++) { + for (const nextDigit of moves[digit]) { + next[nextDigit] = + (next[nextDigit] + dp[digit]) % MOD; + } + } + + dp = next; + } + + return dp.reduce( + (sum, count) => (sum + count) % MOD, + 0 + ); +};