BOJ - 2057

주의·2024년 1월 15일
0

boj

목록 보기
79/214

백준 문제 링크
팩토리얼 분해

❓접근법

  1. N이 1000000000000000000 까지이므로
    (0 ~ 20)까지의 팩토리얼을 담은 리스트 fact를 만든다.
  2. 초기값 s = 0, isFalse = False로 정하고
    fact를 가장 큰 값부터 거꾸로 살펴보면서,
  • 만약 s + fact[i] < N 이라면
    s += fact[i]
  • 만약 s + fact[i] == N 이라면
    isFalse = True
    break해서 반복문을 탈출해준다.
  1. 마지막으로 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')

0개의 댓글