[백준/파이썬] 2057번 팩토리얼 분해 풀이

업데이트:



문제 정보


풀이

문제

정수 N을 서로 다른 팩토리얼 값들의 합으로 표현할 수 있는지 판정하는 문제입니다.

코드

n = int(input())

m = [1]

i = 1
while True:
    if m[-1]*i > n: break
    m.append(m[-1]*i)
    i += 1

f = False
def dfs(case):
    if sum(map(lambda i:m[i], case)) == n:
        global f
        f = True
        return
    for i in range(case[-1]+1, len(m)):
        if f:return
        dfs(case + [i])

i = 0
while i < len(m) and not f:
    dfs([i])
    i += 1

print('YES' if f else 'NO')

설명

N 이하의 팩토리얼 수들을 만든 뒤 중복 없이 고르는 조합을 DFS로 탐색해 합이 N이 되는 경우가 있으면 YES를 출력합니다.



댓글남기기