[백준] 2057번 팩토리얼 분해

거북이·2023년 2월 9일
0

백준[실버1]

목록 보기
36/67
post-thumbnail

💡문제접근

  • N의 값의 범위는 0 ≤ N ≤ 1,000,000,000,000,000,000이다. dp배열의 값을 최대 20!까지 저장할 수 있도록 설정한다. 그 다음 N의 값이 팩토리얼의 값보다 크거나 같으면 N에서 빼주면서 N이 0이 되는지 안되는지 판별한다.

💡코드(메모리 : 31256KB, 시간 : 40ms)

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")

💡소요시간 : 5m

0개의 댓글