leetcode(리트코드)-935 Knight Dialer(PYTHON)
leetcode(리트코드)-935 Knight Dialer(PYTHON)
leetcode 935 - Knight Dialer 문제입니다.
1. 문제
https://leetcode.com/problems/knight-dialer/
2. Input , Output
3. 분류 및 난이도
Medium 난이도 문제입니다.
4. 문제 해석
- 체스의 knight라고 생각하고 전화번호를 누른다고 가정합니다.
- ” 1 2 3 “
- ” 4 5 6 “
- ” 7 8 9 “
- ” * 0 # “
- 이라고 할 때 숫자만 눌러야합니다. n자리수의 전화번호를 만들 때 가능한 경우의 수를 10^9+7로 나누어 리턴합니다.
5. code
코드설명
- 일단 5번을 누르는 경우는 n이 1인 경우말고는 없습니다.
- 마지막으로 누른 번호가 4와 6번인 경우에는 각 3가지의 경우가 있습니다.
- 마지막으로 누른 번호가 4와 6번이 아닌 경우는 각 2가지의 경우가 있습니다.
python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class Solution:
def knightDialer(self, n: int) -> int:
x0 = x1 = x2 = x3 = x4 = x5 = x6 = x7 = x8 = x9 = 1
for i in range(n-1) :
x0,x1,x2,x3,x4,x6,x7,x8,x9 = \
x4 + x6, x6 + x8, x7 + x9,\
x4 + x8, x3 + x0 + x9, x0 + x1 + x7,\
x2 + x6, x1 + x3, x2 + x4
res = x0 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9
if n != 1:
res-=1
return (res) % (10**9 + 7)
6. 결과 및 후기, 개선점
필요시 c++로 짜드립니다.
설명이 필요하다면 댓글을 달아주세요.
This post is licensed under CC BY 4.0 by the author.