네트워크 선 자르기 (Top-Down)

생성일: 2022년 2월 22일 오후 2:39

구현 코드

# 네트워크 선 자르기 (Top-Down: 재귀, 메모이제이션)
import sys
#sys.stdin = open("in1.txt", "rt")

n = int(input())
res = []

def factorial(n): 
    return 1 if (n==1 or n==0) else n * factorial(n - 1);  

# i는 2의 개수
for i in range(0, n//2+1):
    numberOfOne = n-2*i
    res.append((numberOfOne, i))

cnt = 0
for x in res:
    if x[0] == 0 or x[1] ==0:
        cnt += 1
    else:
        cnt += factorial(x[0]+x[1])//(factorial(x[0])*factorial(x[1]))

print(cnt)

모범 답안

# 네트워크 선 자르기 (Top-Down: 재귀, 메모이제이션)
import sys
#sys.stdin = open("in1.txt", "rt")

def DFS(len):
    if len == 1 or len == 2:
        return len
    else:
        if dy[len] == 0:
            dy[len] = DFS(len-2)+DFS(len-1)
        return dy[len]

if __name__ == "__main__":
    n = int(input())
    dy = [0]*(n+1) # 메모이제이션을 위한 리스트
    print(DFS(n))

메모이제이션

좋은 웹페이지 즐겨찾기