DHistory

[Baekjoon] Greedy - 2057 팩토리얼 분해 본문

Computer Science/Algorithm

[Baekjoon] Greedy - 2057 팩토리얼 분해

ddu0422 2023. 8. 15. 15:13

문제

 

2057번: 팩토리얼 분해

음 아닌 정수 N이 주어졌을 때, 이 수를 서로 다른 정수 M(M ≥ 1)개의 팩토리얼의 합으로 나타낼 수 있는지 알아내는 프로그램을 작성하시오. 예를 들어 2=0!+1!로 나타낼 수 있지만, 5는 이와 같은

www.acmicpc.net

 

풀이

"""
음이 아닌 정수 N (0, 양의 정수)
서로 다른 정수 (M >= 1)개의 팩토리얼 합으로 나타낼 수 있는지 알아보는 프로그램
-> 0! = 1
"""
import itertools


n = int(input())


def solution(n):
    factories = [1]

    for i in range(1, 21):
        factories.append(factories[i - 1] * i)

    for i in range(1, len(factories) + 1):
        for value in itertools.combinations(factories, i):
            if n == sum(value):
                return 'YES'

    return 'NO'


print(solution(n))

 

채점 결과