백준 문제 링크
팩토리얼 분해
- N이 1000000000000000000 까지이므로
(0 ~ 20)까지의 팩토리얼을 담은 리스트 fact를 만든다.- 초기값 s = 0, isFalse = False로 정하고
fact를 가장 큰 값부터 거꾸로 살펴보면서,
- 만약 s + fact[i] < N 이라면
s += fact[i]- 만약 s + fact[i] == N 이라면
isFalse = True
break해서 반복문을 탈출해준다.
- 마지막으로 isFalse가 True이면 'YES', False이면 'NO'를 출력한다.
N = int(input())
fact = [1,1]
for i in range(2, 21):
fact.append(fact[i-1] * i)
s = 0
isFalse = False
for i in range(20, -1, -1):
if s + fact[i] < N:
s += fact[i]
elif s + fact[i] == N:
isFalse = True
break
if isFalse == True:
print('YES')
else:
print('NO')