- N의 값의 범위는 0 ≤ N ≤ 1,000,000,000,000,000,000이다. dp배열의 값을 최대 20!까지 저장할 수 있도록 설정한다. 그 다음 N의 값이 팩토리얼의 값보다 크거나 같으면 N에서 빼주면서 N이 0이 되는지 안되는지 판별한다.
import sys
input = sys.stdin.readline
N = int(input().strip())
dp = [0] * 21
dp[0] = 1
for i in range(1, 20):
dp[i] = i * dp[i-1]
if N == 0:
print("NO")
else:
for i in range(20, -1, -1):
if N >= dp[i]:
N -= dp[i]
if N == 0:
print("YES")
else:
print("NO")