앨리스와 밥이 차례로 게임을 합니다. 앨리스가 먼저 시작합니다.
처음에는 칠판에 숫자 n 이 적혀 있습니다. 각 플레이어의 차례가 되면, 다음과 같은 이동을 수행합니다:
• 0 < x < n 이고 n \% x == 0 인 임의의 x 를 선택합니다.
• 칠판에 적힌 숫자 n 을 n - x 로 대체합니다.
• 또한, 플레이어가 이동할 수 없는 경우, 그 플레이어는 게임에서 패배합니다.
두 플레이어가 최적의 플레이를 한다고 가정했을 때, 앨리스가 게임에서 승리하는 경우에만 true를 반환하세요.
입력: n = 2
출력: true
설명: 앨리스가 1을 선택하고, 밥은 더 이상 이동할 수 없습니다.
입력: n = 3
출력: false
설명: 앨리스가 1을 선택하고, 밥이 1을 선택하면, 앨리스는 더 이상 이동할 수 없습니다.
1 <= n <= 1000
class Solution:
def divisorGame(self, n: int) -> bool:
dp = [False] * (n + 1)
dp[1] = False
for i in range(2, n + 1):
for x in range(1, i):
if i % x == 0 and not dp[i - x]:
dp[i] = True
break
return dp[n]